Ich suche nach einer Möglichkeit, ein Voronoi-Diagramm zu erstellen, das auf Liniensegmenten anstelle von Punkten basiert. Siehe folgendes Beispiel (entnommen aus dieser Präsentation ).
Idealerweise hätte ich gerne etwas, das ich mit Python schreiben kann, aber eine Lösung mit ArcGIS oder ähnlichem wäre auch akzeptabel.
Die einzige Bibliothek, die ich bisher gefunden habe, ist openvoronoi , was vielversprechend aussieht. Gibt es noch andere?
line
voronoi-thiessen
Snorfalorpagus
quelle
quelle
Antworten:
Wir (ein Universitäts-Team) haben hierfür eine Implementierung mit einem ArcGIS 10.0-Add-In und ArcObjects entworfen. Die Anwendung ist völlig kostenlos. Die Implementierung verwendet eine Rastermethode, die als Eingabepunkte Linien oder Polygone verwendet, um gewöhnliche oder mehrfach gewichtete Voronoi-Diagramme zu erstellen (oder eine Kombination der oben genannten Methoden, dh Sie können einen von jedem Formtyp verwenden und ein einzelnes Diagrammset von bis erstellen drei verschiedene Feature-Classes). Es ist noch in der Entwicklung, sollte aber ziemlich stabil sein, besonders wenn Sie nur Linien machen wollen. Für das Add-In ist die Spatial Analyst-Lizenz erforderlich. Der Code selbst ist Open Source. Sie können ihn also nach Belieben verwenden.
https://github.com/UNTGeography/VoronoiDiagramsGIS
Es verwendet eine ähnliche Methode wie die in @ radouxjus Antwort beschriebene "Euklidische Allokation" und verwendet das Raster "Fließrichtung / Becken", um aus dem resultierenden Raster Vektorpolygone zu erstellen.
quelle
Voronoï ist ursprünglich für Punkte konzipiert. Hier sind die beiden Methoden, die ich mir für Ihr Problem vorstellen kann (unter Berufung auf ArcGIS-Tools, aber wahrscheinlich mit Shapely möglich):
1)
a) Punkte entlang der Linien erzeugen (z. B. verdichten, dann Eckpunkte zur Linie setzen)
b) Erstellen Sie Thiessen-Polygone
c) Lösen Sie die Thiessen-Polygone anhand der Linien auf, die sie schneiden
2)
a) Berechnen Sie mit dem räumlichen Analytiker die euklidische Zuordnung zu den Linien
b) Wandle jede Zone in ein Polygon um
quelle
Für einige Kunden haben ein paar Kollegen und ich daran gearbeitet, zwei Geoverarbeitungswerkzeuge zu erstellen, die dies tun. Während die Geoverarbeitungswerkzeuge nicht öffentlich verfügbar sind, haben wir folgende Python- und C # -Varianten verwendet:
Sowohl der C # - als auch der Python-Wrapper basieren auf der C ++ Boost Voronoi-API: http://www.boost.org/doc/libs/1_54_0/libs/polygon/doc/voronoi_main.htm
Beachten Sie, dass die API viel Speicher belegt. Dies ist kein Problem, wenn Sie Geoverarbeitung für 64-Bit, ArcGIS Pro oder QGIS verwenden. Dies ist eine Einschränkung, wenn Sie ArcGIS Desktop als 32-Bit-Version verwenden. (Ein detailliertes Straßennetz von 40.000 Zeilen oder mehr sollte ausreichen, um die Speichergrenze zu erreichen.)
quelle
ET Geowizards (Ein Plugin für Arc) hat ein Tool, das Polylinien akzeptiert (siehe Abbildung unten). Leider benötigen Sie das lizenzierte Produkt, um das Tool auszuführen, aber ich denke, es sollte den Trick tun.
quelle
Und noch eine Möglichkeit, Ihre Aufgabe mit PostgreSQL / PostGIS zu lösen.
Wenn die Zeilen kurz und einfach sind, führen Sie das Skript aus:
Sehen Sie das Ergebnis.
Wenn die Zeilen lang sind, führen Sie das Skript aus:
Sehen Sie das Ergebnis.
Verdichten Sie bei Bedarf die Anzahl der Punkte auf den Linien. In meinem Beispiel sind dies die 10 Punkte.
Originelle Lösungen.
Dieses Skript heißt: ST_VoronoiDiagramsFromLines.
quelle