Extracción de la línea central de un polígono complejo en PostGIS / Python

8

¿Alguna idea de cómo extraer la línea central del siguiente polígono (Fig1) usando las funciones de PostGIS o los módulos de Python? Estaba probando la función Voronoi, pero eso no es útil para este tipo de forma. Quiero algo como Fig2 blackline.

Fig1: Forma de polígono Fig2: Línea central

Zia
fuente
2
Es posible que desee ver esta respuesta: gis.stackexchange.com/questions/29863/… Sé que utiliza ArcGIS en su lugar, pero el enfoque puede ser útil.
WhiteboxDev
2
¿Qué tal: postgis.net/docs/ST_StraightSkeleton.html ?
Jakub Kania
@Jakub Estoy tratando de configurar SFCGAL (necesario para la función Esqueleto) para mi base de datos PostGIS ya existente. ¿Aunque he instalado el libSFCGAL.soarchivo en el /usr/local/libdirectorio pero no sé cómo traer ST_StriaghtSkeleton()el db? ¿Alguna idea?
Zia
PostGIS debe compilarse con soporte SFCGAL, pero esa es una pregunta diferente y no es algo con lo que esté demasiado familiarizado.
Jakub Kania
@Jakub Gracias. He resuelto de alguna manera esta configuración SFCGAL por mí mismo aquí
Zia

Respuestas:

4

Esta puede ser una herramienta incorrecta para usted, pero puede hacerlo simplemente con OpenJUMP y el complemento Skeletonizer. El complemento se puede descargar desde http://sourceforge.net/projects/jump-pilot/files/OpenJUMP_plugins/More%20Plugins/JUMP%20Skeletonizer%20Plugin/

El archivo zip contiene un buen manual. El complemento está destinado a corrientes y cuerpos de agua, pero su polígono me imita una corriente.

Este es su polígono como lo digitalicé. Observe los vértices en las líneas centrales de las entradas / salidas.

ingrese la descripción de la imagen aquí

Puntos de entrada digitalizados en una capa separada. Los puntos deben ajustarse a los vértices en el límite del polígono.

ingrese la descripción de la imagen aquí

Use las herramientas de Skeletonizer y complete los campos.

ingrese la descripción de la imagen aquí

Obtén el resultado

ingrese la descripción de la imagen aquí

usuario30184
fuente
Lamentablemente, el archivo jar no contiene ningún manual. ¿Podría guiarme cómo agregar este complemento a mi OpenJump-GUI?
Zia
Mire dentro del zip , en skeletonizer-1.0 \ doc \ debería encontrar el archivo "SkeletonizerUserGuide.doc". La instalación se realiza colocando los archivos jar del skeletonizer-1.0 \ lib \ en el directorio lib \ ext en OpenJUMP.
user30184
Sin embargo, parece que la mayoría de los frascos o versiones más nuevas de esos ya están incluidos en OpenJUMP, ya sea en \ lib o en \ lib \ ext. Quizás sea mejor copiar solo aquellos que parecen faltar. Es necesario reiniciar después de agregar nuevos frascos.
user30184
Encontré este frasco aquí . Pero recibo este error java.lang.Exception: Could not determine shapefile type - data is either all GeometryCollections or empty (Illegal State Exception)al ejecutar este complemento Skeletonizer
Zia
3

Si su polígono es ráster, digitalícelo.

Una vez que su polígono es realmente un polígono :), una primera solución radica, como dijo @WhiteboxDev, es el esqueleto recto, pero tiene el problema de que, además de la línea central que desea, también devuelve una gran cantidad de segmentos que se irradian desde esa línea a El borde de su polígono. Pero si tiene PostGIS 2.2+, puede usarlo ST_ApproximateMedialAxis(), que es lo que desea.

Marcos Dione
fuente