Próbuję podzielić wielokąt na mniejsze wielokąty z linii, ale myślę, że nie mogę użyć funkcji st_split. Potrzebuję stworzyć małe wielokąty wewnątrz dużego, używając siatki linii.
Próbowałem na kilka sposobów, ale nie mogę uzyskać wyniku. Co próbowałem:
Podziel jeden wielokąt z LineString za pomocą st_split ()
Z wieloboku granicznego.
I Linestring table:
Potrzebowałbym następujących wielokątów:
Problem : Nie mogę rozdzielić wielokąta z kilku linii, ani wielokąta z multilinestingu.
Inną metodą, którą próbuję, jest utworzenie wielokątów z linii za pomocą st_polygonize (). Próbowałem SQL:
SELECT
g.path[1] as gid,
g.geom::geometry(polygon, 22033) as geom
FROM
(SELECT
(ST_Dump(ST_Polygonize(geom))).*
FROM linestable
) as g;
Wyodrębniono z Tworzenie wielokątów z segmentów linii za pomocą PostgreSQL i PostGIS
Problem : Mogę uzyskać tylko jeden wielokąt (granicę).
Czy ktoś może mi powiedzieć, który byłby najlepszy sposób na wydobycie wielokątów z linestring, czy jeśli czegoś mi brakuje?
Uwaga: Tabele mają ten sam SRID, a geometrie są przyciągane do siatki. W QGIS potrafię perfekcyjnie uruchomić proces poligonizacji od linii do wielokąta.
Zgodnie z żądaniem Johna, oto stół z liniami. https://drive.google.com/file/d/0B603y_m735jfS014S0EyVnpMUEU/view?usp=sharing
Odpowiedzi:
Zacząłem działać, używając najpierw ST_Node , w połączeniu ze ST_Collect , do przekształcenia linii w zestaw oznaczonych liniami linii w ciągu MultiLinestring .
Jak napisano w dokumentacji dla ST_Node :
Oznacza to, że wszystkie linie łączone są we wszystkich możliwych kombinacjach, tak aby stanowiły odpowiednik zewnętrznego pierścienia wielokąta. Natomiast jeśli spróbujesz ST_Polygonize zestawu LineStrings, z których żaden sam nie opisuje wielokąta, po prostu odzyskasz LineStrings. To działa:
Jeśli po prostu uruchomisz pierwszą część tego, tj. CTE multi, wynik wygląda następująco:
Teraz, gdy teraz podajesz ten MultiLinestring do ST_Polygonize , działa on zgodnie z oczekiwaniami, np.
Oczywiście ST_AsText służy wyłącznie do ilustracji i będziesz musiał dostosować, jeśli chcesz również identyfikator ścieżki.
Kluczową kwestią jest to, że ST_Polygonize oczekuje linii, które już opisują obrys wielokąta , co jest tym, co ST_Node (ST_Collect (.... powyżej).
źródło
ST_Polygonize()
mówi, że bierze ciągów liniowych, lub co przypadek użycia jest, że bez wywoływaniaST_Node()
pierwszy