Más

Creación de una capa de cadena de líneas que se cruza a partir de dos capas de polígono usando cierta tolerancia

Creación de una capa de cadena de líneas que se cruza a partir de dos capas de polígono usando cierta tolerancia


Tengo dos capas de postgis:

  • La primera capa contiene las aceras de mi pueblo (polígonos en azul).
  • El segundo contiene las aceras (carreteras) de mi pueblo (polígonos en marrón).

El mapa se ve así en QGIS con ambas capas activadas:

Ok, ahora tengo que obtener una capa con los bordillos (líneas) en la ciudad a partir de estas dos capas. La nueva capa debe estar compuesta por cadenas de líneas. Cada elemento de esta nueva capa debe ser una cadena de líneas donde se cruzan todas las greometrías de las dos capas.

En la siguiente instantánea pinté manualmente las geometrías que deberían crearse en esta área particular:

Perdón por mi pulso malo. Espero que ayude a comprenderme mejor.

Ok, si solo agrego las capas a QGIS, por ejemplo, e interseco una capa con otra, obtengo la siguiente capa:

La nueva capa verde es la capa de bordillos obtenida. Tengo dos inconvenientes con esta capa:

  • Está compuesto por polígonos
  • No todas las curvas están dibujadas.

Con esta última evidencia descubro que las capas de aceras y carreteras no estaban delineadas con precisión una al lado de la otra, por lo que necesito algún tipo de tolerancia en la operación para conseguir la capa que estoy buscando. Como dije antes, debería ser una capa de cadena de líneas.

No me importa si la consulta se realiza directamente en postgis o usando QGIS u otras herramientas de software, simplemente no puedo averiguar ahora cómo resolver esto.


En PostGIS puede usar ST_Buffer para agregar un pequeño margen a una de las capas de polígono, luego use ST_Intersection para obtener el polígono de bordillos. Ahora, ST_StraightSkeleton puede darle lo que desea (en realidad no lo he probado, pero debería funcionar).

Como se indica a continuación, esqueletizar produce un resultado incorrecto. La mejor manera debería ser hacerloST_DumpRingsen el polígono de carreteras y obtenerST_Intersectionde anillos y el polígono de acera.