Как преобразовать данные полигона в отрезки, используя PostGIS - PullRequest
10 голосов
/ 29 сентября 2011

У меня есть таблица данных многоугольника в PostgreSQL / PostGIS. Теперь мне нужно преобразовать эти данные полигона в соответствующие отрезки. Может кто-нибудь сказать мне, как конвертировать его с помощью запросов PostGIS.

Заранее спасибо

Ответы [ 2 ]

17 голосов
/ 04 октября 2011

Как правило, преобразование многоугольника в линию может быть непростым, поскольку не существует однозначного сопоставления и различные элементы многоугольника отображаются на разные линейные линии (внешнее кольцо, внутренние кольца и т. Д.).

Учитывая это, вам нужно будет разделить каждый из них по отдельности, следуя возможному подходу, подобному следующему:

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

0 голосов
/ 02 марта 2017

Это первое попадание в Google при поиске этой проблемы.Я не знаю, прошло ли так много времени с тех пор, как была создана функция, но для будущих гуглов ST_ExteriorRings (geom) отлично сработал для меня.http://postgis.net/docs/ST_ExteriorRing.html

...