Ogólnie rzecz biorąc, konwersja wielokąta na linię może nie być prosta, ponieważ jest brak mapowania jeden do jednego i różne elementy mapowania wielokątów na różne ciągi liniowe (pierścień zewnętrzny, pierścienie wewnętrzne itp.).
Biorąc to pod uwagę, musisz podzielić każdy z nich osobno, stosując możliwe podejście takie jak to:
SELECT ST_AsText( ST_MakeLine(sp,ep) )
FROM
-- extract the endpoints for every 2-point line segment for each linestring
(SELECT
ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) as sp,
ST_PointN(geom, generate_series(2, ST_NPoints(geom) )) as ep
FROM
-- extract the individual linestrings
(SELECT (ST_Dump(ST_Boundary(geom))).geom
FROM mypolygontable
) AS linestrings
) AS segments;
w zależności od tego, jakie dane wielokątów są przechowywane w mypolygontable
, możesz chcieć zrzucić nie tylko granicę (jak powyżej, używając ST_Boundary
), ale także inne elementy. Powyższy kod z bardziej szczegółowym przeglądem pochodzi z listy postgis-users:Podziel wielokąt na N ciągów liniowych
Istnieje również ogólne podejście do problemu wyjaśnione w Rozbijanie ciągu linii lub wielokąta na pojedyncze wektory w PostGIS