Ich versuche, ein Werkzeug zu finden, um mit QGIS und seinem Bundle ein Skelett eines großen Vektordatensatzes zu erstellen. Es sollte direkt programmgesteuert über Python oder die Befehlszeile aufrufbar sein (QGIS, GRASS, OGR usw. sind alle in Ordnung).
Das Ziel ist ein großes dünnes Polygon mit Löchern, die Straßenbereiche darstellen, und ich muss eine Annäherung des Straßennetzes durch Skelettierung erhalten.
Was ich bisher gefunden habe:
- GRASS 7.0
v.skeleton
sollte gut genug sein, scheint aber in naher Zukunft nicht in QGIS integriert zu sein. - CGAL hat natürlich Skelettierungsalgorithmen, aber die Python-Unterstützung ist sehr schlecht.
- pySkeleton funktioniert bei mir nicht und ich habe wahrscheinlich keine Zeit, den Code zu retten.
Andere Alternativen (openJump Skeletonizer, dieses alte ArcGIS-Plugin ...) lassen sich nicht einfach in QGIS / Python einbinden .
Irgendwelche anderen Vorschläge?
Antworten:
Dieses Dokument „Skelettierung Polygonen PostGIS“ beschreibt ein Verfahren , das Tool von nutzt PostGIS und GRASS , von denen beide könnten aufrufbar sein. Es wird erwähnt, dass PostGIS verwendet wird, um ein Skelett der Vektoren zu erstellen und es entweder mit PostGIS erneut oder mit GRASS zu bereinigen.
Es gibt vorhandene Tools aus der Processing Toolbox, die hoffentlich das Aufrufen über Python / Befehlszeile vereinfachen, wie z.
In PostGIS importieren - Verwenden Sie diese Option, um Ihren Datensatz zu importieren.
PostGIS führt SQL aus - wird zum Ausführen der
ST_StraightSkeleton
Funktion verwendet.v.clean - Verwenden Sie diese Option , um das
rmdangle
Tool auszuführen .Hoffe das hilft!
quelle
Eine etwas umständliche Option könnte darin bestehen, das Grid-Skeletonization-Modul von SAGA ( http://www.saga-gis.org/saga_module_doc/2.1.3/imagery_segmentation_1.html ) entweder über QGIS oder über das Befehlszeilenprogramm zu verwenden
saga_cmd
. Sie müssten zuerst Ihr Polygon in ein SAGA-Raster konvertieren.Andernfalls können Sie, wie von @ Alpha-beta -oup angegeben,
v.skeleton
von GRASS in der Befehlszeile aus verwenden.Verwenden Sie das
subprocess
Modul, um die Befehlszeichenfolge an das System zu übergeben, um ein Befehlszeilentool in Python zu verwenden.quelle