Squelette de vecteurs dans QGIS / Python

8

J'essaie de trouver un outil pour créer le squelette d'un grand ensemble de données vectorielles en utilisant QGIS et son bundle. Il doit être directement programmable par programme via Python ou la ligne de commande (QGIS, GRASS, OGR, etc. sont tous corrects).

La cible est un grand polygone mince avec des trous représentant des rues et j'ai besoin d'obtenir une approximation du réseau routier via la squelette.

Ce que j'ai trouvé jusqu'à présent:

  • GRASS 7.0 a v.skeletonce qui devrait être assez bon mais ne semble pas être prêt à être intégré à QGIS dans un avenir proche.
  • CGAL a des algorithmes squelettés, bien sûr, mais le support Python est très pauvre.
  • pySkeleton ne fonctionne pas pour moi et je n'ai probablement pas le temps de récupérer le code.

D'autres alternatives (openJump skeletonizer, cet ancien plugin ArcGIS ...) ne peuvent pas être facilement connectées à QGIS / Python.

D'autres suggestions?

Jan Šimbera
la source
4
GRASS 7.0 est "directement appelable par programmation via Python ou la ligne de commande", alors pourquoi votre solution doit-elle être aussi étroitement liée à QGIS? Et qu'en est-il de PostGIS? Comment sont stockées vos données?
alphabetasoup
2
Je voudrais publier la solution en tant que plugin QGIS directement utilisable - par conséquent, je voudrais m'en tenir à la version GRASS fournie par QGIS.
Jan Šimbera

Réponses:

6

Ce document "Skeletonizing Polygons Using PostGIS" décrit un processus qui utilise des outils de PostGIS et GRASS , qui peuvent tous deux être appelables. Il mentionne l'utilisation de PostGIS pour créer un squelette des vecteurs et le nettoyer en utilisant à nouveau PostGIS ou GRASS.

Il existe des outils existants de la boîte à outils de traitement qui, espérons-le, simplifient les choses lors de l'appel à partir de Python / ligne de commande, tels que:

J'espère que cela t'aides!

Joseph
la source
Merci! Cependant, je dois supposer qu'aucun PostGIS n'est installé ...
Jan Šimbera
@ JanŠimbera - Bienvenu mon pote et bonne chance! Cela ressemble à un problème très intéressant que vous avez :)
Joseph
4

Une option, un peu ronde, pourrait être d'utiliser le module de squelettisation de la grille de SAGA ( http://www.saga-gis.org/saga_module_doc/2.1.3/imagery_segmentation_1.html ), soit via QGIS, soit en utilisant l' saga_cmdutilitaire de ligne de commande . Vous devez d'abord convertir votre polygone en raster SAGA.

Sinon, comme indiqué par @ Alpha-beta-soup, vous pouvez utiliser v.skeletondepuis GRASS sur la ligne de commande.

Pour utiliser un outil de ligne de commande à partir de Python, utilisez le subprocessmodule pour passer la chaîne de commande au système.

Paulo Raposo
la source
Merci pour la suggestion. Je préfère ne pas convertir en raster car l'étendue est grande et j'ai besoin du résultat avec une résolution fine; Je pense à cela comme une option de dernier recours.
Jan Šimbera