Extrahieren der Mittellinie eines komplexen Polygons in PostGIS / Python

8

Haben Sie eine Idee, wie Sie die Mittellinie des folgenden Polygons (Abb. 1) mithilfe von PostGIS-Funktionen oder Python-Modulen extrahieren können? Ich habe Voronoi Function ausprobiert, aber das ist für diese Art von Form nicht hilfreich. Ich möchte so etwas wie Fig2 Blackline.

Abb1: Polygonform Abb2: Mittellinie

Zia
quelle
2
Vielleicht möchten Sie sich diese Antwort ansehen : gis.stackexchange.com/questions/29863/… Ich weiß, dass stattdessen ArcGIS verwendet wird, aber der Ansatz kann nützlich sein.
WhiteboxDev
2
Wie wäre es mit: postgis.net/docs/ST_StraightSkeleton.html ?
Jakub Kania
@Jakub Ich versuche, SFCGAL (für die Skeleton-Funktion erforderlich) für meine bereits vorhandene PostGIS-Datenbank zu konfigurieren. Ich habe zwar die libSFCGAL.soDatei im /usr/local/libVerzeichnis installiert , weiß aber nicht, wie ich ST_StriaghtSkeleton()die Datenbank einspielen soll? Irgendeine Idee?
Zia
PostGIS muss mit SFCGAL-Unterstützung kompiliert werden, aber das ist eine andere Frage und nicht etwas, mit dem ich zu vertraut bin.
Jakub Kania
@ Jakub Danke. Ich habe diese SFCGAL-Konfiguration hier
Zia

Antworten:

4

Dies mag ein falsches Tool für Sie sein, aber Sie können es einfach mit dem OpenJUMP- und Skeletonizer-Plugin tun. Das Plugin kann von http://sourceforge.net/projects/jump-pilot/files/OpenJUMP_plugins/More%20Plugins/JUMP%20Skeletonizer%20Plugin/ heruntergeladen werden.

Die Zip-Datei enthält ein gutes Handbuch. Das Plugin ist für Streams und Gewässer gedacht, aber Ihr Polygon ahmt für mich einen Stream nach.

Dies ist Ihr Polygon, wie ich es digitalisiert habe. Beachten Sie die Eckpunkte in den Mittellinien der Ein- / Ausgänge.

Geben Sie hier die Bildbeschreibung ein

Einstiegspunkte auf einer separaten Ebene digitalisiert. Punkte müssen an Scheitelpunkten an der Polygongrenze einrasten.

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie die Skeletonizer-Werkzeuge und füllen Sie die Felder aus

Geben Sie hier die Bildbeschreibung ein

Holen Sie sich das Ergebnis

Geben Sie hier die Bildbeschreibung ein

user30184
quelle
Leider enthält die JAR-Datei kein Handbuch. Könnten Sie mir bitte zeigen, wie ich dieses Plugin zu meiner OpenJump-GUI hinzufüge?
Zia
Schauen Sie in die Zip -Datei, in skeletonizer-1.0 \ doc \ sollten Sie die Datei "SkeletonizerUserGuide.doc" finden. Die Installation erfolgt durch Ablegen der JAR-Dateien aus skeletonizer-1.0 \ lib \ in das Verzeichnis lib \ ext in OpenJUMP.
user30184
Es sieht jedoch so aus, als ob die meisten Jars oder neueren Versionen davon bereits in OpenJUMP entweder in \ lib oder in \ lib \ ext enthalten sind. Vielleicht ist es am besten, nur diejenigen zu kopieren, die zu fehlen scheinen. Nach dem Hinzufügen neuer Gläser ist ein Neustart erforderlich.
user30184
Ich habe dieses Glas hier gefunden . Aber ich bekomme diesen Fehler java.lang.Exception: Could not determine shapefile type - data is either all GeometryCollections or empty (Illegal State Exception)beim Ausführen dieses Skeletonizer-Plugins
Zia
3

Wenn Ihr Polygon ein Raster ist, digitalisieren Sie es.

Sobald Ihr Polygon wirklich ein Polygon ist :), liegt eine erste Lösung, wie @WhiteboxDev sagte, es ist das gerade Skelett, aber es hat das Problem, dass es neben der gewünschten Mittellinie auch viele Segmente zurückgibt, die von dieser Linie zu strahlen der Rand Ihres Polygons. Wenn Sie jedoch PostGIS 2.2+ haben, können Sie ST_ApproximateMedialAxis()stattdessen das verwenden, was Sie möchten.

Marcos Dione
quelle