(edycja 2019) ST_VoronoiPolygons dostępne od PostGIS v2.3 !
W PostGIS 2.1+ możemy użyć ST_DelaunayTriangles () do wygenerowania triangulacji Delaunaya , która jest podwójnym wykresem jej diagramu Voronoi , i teoretycznie mają one dokładną i odwracalną konwersję.
Czy istnieje jakiś bezpieczny skrypt w standardzie SQL ze zoptymalizowanym algorytmem dla tej konwersji PostGIS2 Delaunay na Voronoi ?
postgis
sql
voronoi-thiessen
Peter Krauss
źródło
źródło
ST_DelaunayTriangles
w Linux Debian Stable .Odpowiedzi:
Poniższe zapytanie wydaje się wykonywać rozsądny zestaw wielokątów voronoi, zaczynając od trójkątów Delaunay.
Nie jestem dużym użytkownikiem Postgres, więc prawdopodobnie można go nieco poprawić.
W ten sposób powstaje następujący zestaw wielokątów dla przykładowych punktów zawartych w zapytaniu
Wyjaśnienie zapytania
Krok 1
Utwórz trójkąty Delaunay z geometrii wejściowych
Krok 2
Rozłóż trójkątne węzły i wykonaj krawędzie. Myślę, że powinien istnieć lepszy sposób na uzyskanie krawędzi, ale go nie znalazłem.
Krok 3
Zbuduj opisane okręgi dla każdego trójkąta i znajdź środek ciężkości
Edges
CTE wyprowadza każdą krawędź i ID (ścieżki) trójkąta, do której należy.Krok 4
„Outer Join” stół „Edges” do siebie, w którym są równe krawędzie dla różnych trójkątów (krawędzie wewnętrzne).
Tam, gdzie jest wspólna krawędź, narysuj linię między odpowiednimi centroidami
Tam, gdzie krawędź nie jest połączona (zewnętrzna), narysuj linię od środka ciężkości przez środek krawędzi. Zrób to tylko, jeśli środek koła znajduje się w zestawie trójkątów.
Krok 5
Uzyskaj wypukły kadłub dla narysowanych linii jako linię. Połącz i połącz wszystkie linie. Węzeł zestawu linii, abyśmy mieli zestaw topologiczny, który można poligonizować.
źródło
ST_ConvexHull
iST_Centroid
zamiast „prostopadłe” jako rzeczownik w algorytmie bezpośredniego sugestią mojego REF1 / Kenneth Sloa ... Dlaczego nie bezpośrednie rozwiązanie?ST_DelaunayTriangles
w Linux Debian Stable .