Я пытаюсь разделить многоугольник на более мелкие многоугольники из линии, но я думаю, что не могу использовать функцию st_split. Что мне нужно, так это создать маленькие полигоны внутри большого, используя сетку линий.
Я пробовал несколько способов, но я не могу получить результат. Что я пробовал:
Разделите один многоугольник от LineString, используя st_split ()
С пограничного многоугольника.
И Линестринг стол:
Мне понадобятся следующие полигоны:
Проблема : я не могу разделить многоугольник по нескольким линиям, ни многоугольник из многоканальной строки.
Другой метод, который я пытаюсь создать, состоит в создании полигонов из линий с помощью st_polygonize (). SQL-код, который я пробовал:
SELECT
g.path[1] as gid,
g.geom::geometry(polygon, 22033) as geom
FROM
(SELECT
(ST_Dump(ST_Polygonize(geom))).*
FROM linestable
) as g;
Извлечено из создания полигонов из линейных сегментов с использованием PostgreSQL и PostGIS
Проблема : я могу получить только один многоугольник (границу).
Может кто-нибудь сказать мне, что было бы лучшим способом получить полигоны из строки, или я что-то упустил?
Примечание. Таблицы находятся в одном и том же SRID, а геометрии привязаны к сетке. В QGIS я могу отлично запустить процесс полигонизации от линий до полигонов.
По требованию Джона, вот таблица линий. https://drive.google.com/file/d/0B603y_m735jfS014S0EyVnpMUEU/view?usp=sharing
Ответы:
Я получил эту работу, используя сначала ST_Node , в сочетании с ST_Collect , чтобы преобразовать строки в набор узловых строк в пределах MultiLinestring .
Как сказано в документации для ST_Node :
Это означает, что все линейные линии объединены во всех возможных комбинациях, чтобы составить эквивалент внешнего кольца многоугольника. Принимая во внимание, что если вы пытаетесь ST_Polygonize набор LineStrings, ни один из которых сам по себе не описывает многоугольник, вы просто возвращаете LineStrings. Итак, это работает:
Если вы просто запустите первую часть этого, то есть CTE multi, результат будет выглядеть так:
Теперь, когда вы теперь передаете эту MultiLinestring в ST_Polygonize, она работает как положено, например,
Очевидно, что ST_AsText только для иллюстрации, и вам придется настроить, если вы тоже хотите идентификатор пути.
Ключевым выводом является то, что ST_Polygonize ожидает строки строк, которые уже описывают контур многоугольника , что и делает ST_Node (ST_Collect (.... в приведенном выше).
источник
ST_Polygonize()
говорит , что это берет строку строки, или то , что случай использования для этого без вызоваST_Node()
первого