Страница 1 из 1
Объединение непересекающихся векторных полигонов
Добавлено: 24 мар 2021, 20:36
snouman
Добрый день,
Может быть, кто-нибудь пробовал или есть какие-нибудь идеи (буфер, полигон в точки и т.д.), как можно объединить несколько векторных неперекрывающихся друг с другом объектов и не имеющих общих сторон. То есть это должен быть объект (замкнутая линия, полигон), охватывающий "внешние" вершины нескольких полигонов, но при этом в целом повторяя их форму (см. прикреп. рисунок, красная линия).
Я пробовал несколько функций в QGIS, в частности Convex Hull и Minimum bounding geometry, но там не получалось то, что нужно. Подойдет любая ГИС, PostGIS, ogr или код на питоне.
Спасибо.
Re: Объединение непересекающихся векторных полигонов
Добавлено: 24 мар 2021, 22:17
Эдуард Казаков
Ну, вообще convex hull по множеству всех вершин это как раз то что отвечает постановке задачи... Попробуйте разные реализации, например из scipy ещё.
Re: Объединение непересекающихся векторных полигонов
Добавлено: 24 мар 2021, 23:31
Svility
Так можно попробовать. Склеить нужные полигоны, а после вычислить выпуклую оболочку мульти-геометрии:
Код: Выделить всё
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
Re: Объединение непересекающихся векторных полигонов
Добавлено: 25 мар 2021, 02:27
Ivor
У вас на рисунке невыпуклая оболочка, и, скорее всего, готового универсального решения не найдёте. А решение для частного случая запрограммировать можно хоть на питоне, хоть ещё как
Re: Объединение непересекающихся векторных полигонов
Добавлено: 25 мар 2021, 19:42
gamm
Постановка невнятная (сверху соединены вершины, снизу линия втыкается в ребро). Если соединять вершины, то можно написать программу, чтобы поправить выпуклую оболочку. Если две точки ребра выпуклой оболочки лежат на одном контуре, то заменяем ребро на часть контура между точками, "вдавливая" ребро вдоль полигона.
Re: Объединение непересекающихся векторных полигонов
Добавлено: 25 мар 2021, 23:46
snouman
Да, согласен, с точки зрения геометрии постановка задачи не совсем корректная в части выпуклости/невыпуклости.
Тем не менее, еще немного покопавшись в QGIS, я нашел другую функцию - Concave Hull, которая возвращает практически то, что нужно. В PostGIS она тоже есть, и для этих конкретных объектов сработала лучше (предварительно используется ST_Union). Вот такой получился результат (рис.).
Спасибо всем за помощь.
Re: Объединение непересекающихся векторных полигонов
Добавлено: 26 мар 2021, 08:25
gamm
это примерно то, о чем я говорил, но некоторые ребра "недодавлены". Посмотрите параметры, не исключено, что там есть настройки, которые можно докрутить.
Точно, есть там параметр,
RTFM