Generellt sett kan det inte vara enkelt att konvertera polygon till linje eftersom det finns ingen en-till-en-mappning och olika element av polygon mappar till olika linjesträngar (exteriör ring, inre ringar, etc.).
Med tanke på det kommer du att behöva dela upp var och en av dem separat efter möjliga tillvägagångssätt så här:
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;
beroende på vilken polygondata som lagras i mypolygontable
, du kanske vill dumpa inte bara gränsen (som ovan med ST_Boundary
) men även andra element. Koden ovan med mer detaljerad översikt är hämtad från postgis-användarlistan:Dela en polygon till N radsträngar
Det finns också en generisk syn på problemet som förklaras i Explodera en linjesträng eller polygon till individuella vektorer i PostGIS