Объединение непересекающихся векторных полигонов
-
- Новоприбывший
- Сообщения: 10
- Зарегистрирован: 25 дек 2012, 15:00
- Репутация: 1
Объединение непересекающихся векторных полигонов
Добрый день,
Может быть, кто-нибудь пробовал или есть какие-нибудь идеи (буфер, полигон в точки и т.д.), как можно объединить несколько векторных неперекрывающихся друг с другом объектов и не имеющих общих сторон. То есть это должен быть объект (замкнутая линия, полигон), охватывающий "внешние" вершины нескольких полигонов, но при этом в целом повторяя их форму (см. прикреп. рисунок, красная линия).
Я пробовал несколько функций в QGIS, в частности Convex Hull и Minimum bounding geometry, но там не получалось то, что нужно. Подойдет любая ГИС, PostGIS, ogr или код на питоне.
Спасибо.
Может быть, кто-нибудь пробовал или есть какие-нибудь идеи (буфер, полигон в точки и т.д.), как можно объединить несколько векторных неперекрывающихся друг с другом объектов и не имеющих общих сторон. То есть это должен быть объект (замкнутая линия, полигон), охватывающий "внешние" вершины нескольких полигонов, но при этом в целом повторяя их форму (см. прикреп. рисунок, красная линия).
Я пробовал несколько функций в QGIS, в частности Convex Hull и Minimum bounding geometry, но там не получалось то, что нужно. Подойдет любая ГИС, PostGIS, ogr или код на питоне.
Спасибо.
- Вложения
-
- полигоны.JPG (38.47 КБ) 4005 просмотров
- Эдуард Казаков
- Гуру
- Сообщения: 546
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 532
- Откуда: Planet Earth
- Контактная информация:
Re: Объединение непересекающихся векторных полигонов
Ну, вообще convex hull по множеству всех вершин это как раз то что отвечает постановке задачи... Попробуйте разные реализации, например из scipy ещё.
- Svility
- Участник
- Сообщения: 55
- Зарегистрирован: 24 окт 2017, 19:41
- Репутация: 5
- Откуда: 32637
Re: Объединение непересекающихся векторных полигонов
Так можно попробовать. Склеить нужные полигоны, а после вычислить выпуклую оболочку мульти-геометрии:
Код: Выделить всё
select ST_ConvexHull(a.geom) as geom
from(
SELECT
ST_Union(f.geom) as geom
from public.my_polygon f
where id in (123,321)
) a
-
- Завсегдатай
- Сообщения: 345
- Зарегистрирован: 11 дек 2006, 09:46
- Репутация: 102
- Откуда: Иркутск
Re: Объединение непересекающихся векторных полигонов
У вас на рисунке невыпуклая оболочка, и, скорее всего, готового универсального решения не найдёте. А решение для частного случая запрограммировать можно хоть на питоне, хоть ещё как
-
- Гуру
- Сообщения: 4049
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1050
- Ваше звание: программист
- Откуда: Казань
Re: Объединение непересекающихся векторных полигонов
Постановка невнятная (сверху соединены вершины, снизу линия втыкается в ребро). Если соединять вершины, то можно написать программу, чтобы поправить выпуклую оболочку. Если две точки ребра выпуклой оболочки лежат на одном контуре, то заменяем ребро на часть контура между точками, "вдавливая" ребро вдоль полигона.
-
- Новоприбывший
- Сообщения: 10
- Зарегистрирован: 25 дек 2012, 15:00
- Репутация: 1
Re: Объединение непересекающихся векторных полигонов
Да, согласен, с точки зрения геометрии постановка задачи не совсем корректная в части выпуклости/невыпуклости.
Тем не менее, еще немного покопавшись в QGIS, я нашел другую функцию - Concave Hull, которая возвращает практически то, что нужно. В PostGIS она тоже есть, и для этих конкретных объектов сработала лучше (предварительно используется ST_Union). Вот такой получился результат (рис.).
Спасибо всем за помощь.
Тем не менее, еще немного покопавшись в QGIS, я нашел другую функцию - Concave Hull, которая возвращает практически то, что нужно. В PostGIS она тоже есть, и для этих конкретных объектов сработала лучше (предварительно используется ST_Union). Вот такой получился результат (рис.).
Спасибо всем за помощь.
- Вложения
-
- concave_hull.JPG (38.85 КБ) 3828 просмотров
-
- Гуру
- Сообщения: 4049
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1050
- Ваше звание: программист
- Откуда: Казань
Re: Объединение непересекающихся векторных полигонов
это примерно то, о чем я говорил, но некоторые ребра "недодавлены". Посмотрите параметры, не исключено, что там есть настройки, которые можно докрутить.
Точно, есть там параметр, RTFM
Точно, есть там параметр, RTFM
Кто сейчас на конференции
Сейчас этот форум просматривают: Semrush [Bot] и 1 гость