Как правило, преобразование многоугольника в линию может быть непростым, поскольку не существует однозначного сопоставления и различные элементы многоугольника отображаются на разные линейные линии (внешнее кольцо, внутренние кольца и т. Д.).
Учитывая это, вам нужно будет разделить каждый из них по отдельности, следуя возможному подходу, подобному следующему:
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: Разделить многоугольник на N строк строки
Существует также общий подход к проблеме, описанной в Разрыв строки или многоугольника в отдельные векторы в PostGIS