Généralement, la conversion d'un polygone en ligne peut ne pas être simple car il y a pas de mappage un à un et divers éléments de carte de polygone à différentes chaînes de lignes (anneau extérieur, anneaux intérieurs, etc.).
Compte tenu de cela, vous devrez diviser chacun de ceux-ci séparément en suivant une approche possible comme celle-ci :
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;
en fonction des données de polygone stockées dans mypolygontable
, vous voudrez peut-être vider non seulement la limite (comme ci-dessus en utilisant ST_Boundary
) mais aussi d'autres éléments. Le code ci-dessus avec un aperçu plus détaillé est tiré de la liste postgis-users :Diviser un polygone en N lignes
Il existe également une approche générique du problème expliquée dans Explosion d'une chaîne de lignes ou d'un polygone en vecteurs individuels dans PostGIS