Esqueleto de vectores en QGIS / Python

8

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.skeletonque 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?

Jan Šimbera
fuente
44
GRASS 7.0 es "directamente programable mediante Python o línea de comandos", entonces ¿por qué su solución también debe estar tan ligada a QGIS? Además, ¿qué pasa con PostGIS? ¿Cómo se almacenan sus datos?
alphabetasoup
2
Me gustaría publicar la solución como un complemento QGIS directamente utilizable, por lo tanto, me gustaría seguir con la versión GRASS incluida por QGIS.
Jan Šimbera

Respuestas:

6

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:

¡Espero que esto ayude!

José
fuente
¡Gracias! Sin embargo, debo suponer que no está instalado PostGIS ...
Jan Šimbera
@ JanŠimbera - ¡Muy bienvenido amigo y buena suerte! Suena como un problema muy interesante que tienes :)
Joseph
4

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_cmdutilidad 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.skeletondesde GRASS en la línea de comando.

Para usar una herramienta de línea de comando y comunicación desde Python, use el subprocessmódulo para pasar la cadena de comando al sistema.

Paulo Raposo
fuente
Gracias por la sugerencia. Prefiero no convertirlo en ráster ya que la extensión es grande y necesito el resultado con una buena resolución; Estoy pensando en eso como una opción de último recurso.
Jan Šimbera