(edit 2019) ST_VoronoiPolygons verfügbar seit PostGIS v2.3 !
Mit PostGIS 2.1+ können wir ST_DelaunayTriangles () verwenden , um eine Delaunay-Triangulation zu generieren , die ein duales Diagramm des Voronoi-Diagramms ist und theoretisch eine genaue und reversible Konvertierung aufweist.
Gibt es ein sicheres SQL-Standard-Skript mit einem optimierten Algorithmus für diese PostGIS2-Konvertierung von Delaunay nach Voronoi ?
postgis
sql
voronoi-thiessen
Peter Krauss
quelle
quelle
ST_DelaunayTriangles
in Linux Debian Stable zu installieren .Antworten:
Die folgende Abfrage scheint eine sinnvolle Menge von Voronoi-Polygonen zu erstellen, die von den Delaunay-Dreiecken ausgehen.
Ich bin kein großer Postgres-Benutzer, daher kann es wahrscheinlich einiges verbessert werden.
Dadurch wird die folgende Gruppe von Polygonen für die in der Abfrage enthaltenen Beispielpunkte erstellt
Abfrage Erläuterung
Schritt 1
Erstellen Sie die Delaunay-Dreiecke aus den Eingabegeometrien
Schritt 2
Zerlegen Sie die Dreiecksknoten, und erstellen Sie Kanten. Ich denke, es sollte einen besseren Weg geben, um die Kanten zu bekommen, aber ich habe keinen gefunden.
Schritt 3
Bilde für jedes Dreieck die umschriebenen Kreise und finde den Schwerpunkt
Der
Edges
CTE gibt jede Kante und die ID (Pfad) des Dreiecks aus, zu dem er gehört.Schritt 4
"Außen" Verbinden Sie die Tabelle "Kanten" mit sich selbst, wobei es gleiche Kanten für verschiedene Dreiecke (Innenkanten) gibt.
Wo es eine gemeinsame Kante gibt, ziehen Sie eine Linie zwischen den jeweiligen Schwerpunkten
Wenn die Kante nicht verbunden ist (außen), ziehen Sie eine Linie vom Schwerpunkt durch die Mitte der Kante. Tun Sie dies nur, wenn der Schwerpunkt des Kreises innerhalb der Dreiecke liegt.
Schritt 5
Holen Sie sich die konvexe Hülle für die gezeichneten Linien als Linie. Vereinige alle Linien und füge sie zusammen. Knoten Sie den Liniensatz, damit wir einen topologischen Satz haben, der polygonisiert werden kann.
quelle
ST_ConvexHull
undST_Centroid
stattdessen "senkrechte Winkelhalbierende" wie im direkten Algorithmus, der von meinem ref1 / Kenneth Sloa vorgeschlagen wurde ... Warum nicht die direkte Lösung?ST_DelaunayTriangles
in Linux Debian Stable zu installieren .