Като цяло преобразуването на многоъгълник в линия може да не е лесно, защото има без съпоставяне един към един и различни елементи от многоъгълника се преобразуват в различни линейни низове (външен пръстен, вътрешни пръстени и т.н.).
Имайки предвид това, ще трябва да разделите всяко от тях поотделно, като следвате възможен подход по следния начин:
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;
в зависимост от това какви многоъгълни данни се съхраняват в mypolygontable
, може да искате да изхвърлите не само границата (както по-горе, използвайки ST_Boundary
), но и други елементи. Кодът по-горе с по-подробен преглед е взет от списъка на postgis-users:Разделяне на многоъгълник на N реда
Съществува и общ подход към проблема, обяснен в Разглобяване на линия или многоъгълник в отделни вектори в PostGIS