Geralmente, converter polígono em linha pode não ser simples porque há sem mapeamento um para um e vários elementos do mapa de polígonos para diferentes cadeias de linhas (anel externo, anéis internos, etc.).
Considerando isso, você precisará dividir cada um deles separadamente seguindo uma abordagem possível como esta:
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;
dependendo de quais dados de polígonos são armazenados em
mypolygontable
, você pode querer despejar não apenas o limite (como acima usando ST_Boundary
), mas também outros elementos. O código acima com uma visão mais detalhada foi retirado da lista postgis-users:Dividir um polígono em N cadeias de linhas
Há também uma abordagem genérica para o problema explicado em Explodindo uma cadeia de linhas ou polígono em vetores individuais no PostGIS