Estoy tratando de encontrar una herramienta para crear un esqueleto de un gran conjunto de datos vectoriales usando QGIS y su paquete. Debería ser directamente programable mediante Python o línea de comandos (QGIS, GRASS, OGR, etc. están bien).
El objetivo es un polígono grande y delgado con agujeros que representan áreas de la calle y necesito obtener una aproximación de la red de carreteras a través de la esqueletización.
Lo que encontré hasta ahora:
- GRASS 7.0 tiene lo
v.skeleton
que debería ser lo suficientemente bueno, pero no parece estar listo para integrarse con QGIS en el futuro cercano. - CGAL tiene esqueletos de esqueleto, por supuesto, pero el soporte de Python es muy pobre.
- pySkeleton no funciona para mí y probablemente no tenga tiempo para recuperar el código.
Otras alternativas (esqueleto de openJump, este antiguo complemento de ArcGIS ...) no se pueden conectar fácilmente a QGIS / Python.
¿Cualquier otra sugerencia?
Respuestas:
Este documento "Esqueleto de polígonos usando PostGIS" describe un proceso que utiliza herramientas de PostGIS y GRASS , las cuales pueden ser invocables. Menciona el uso de PostGIS para crear un esqueleto de los vectores y limpiarlo usando PostGIS nuevamente o GRASS.
Existen herramientas existentes de Processing Toolbox que, con suerte, simplifican las cosas cuando se llama desde Python / línea de comandos, tales como:
Importar a PostGIS : utilícelo para importar su conjunto de datos.
PostGIS ejecuta SQL : se usa para ejecutar la
ST_StraightSkeleton
función.v.clean : se usa para ejecutar la
rmdangle
herramienta.¡Espero que esto ayude!
fuente
Una opción un tanto redonda podría ser utilizar el módulo de esqueleto de cuadrícula de SAGA ( http://www.saga-gis.org/saga_module_doc/2.1.3/imagery_segmentation_1.html ), ya sea a través de QGIS o utilizando la
saga_cmd
utilidad de línea de comandos. Tendría que convertir su polígono a un ráster SAGA primero.De lo contrario, según lo indicado por @ Alpha-beta-soup, podría usar
v.skeleton
desde GRASS en la línea de comando.Para usar una herramienta de línea de comando y comunicación desde Python, use el
subprocess
módulo para pasar la cadena de comando al sistema.fuente