Измените полигоны так, чтобы они не перекрывались, а область оставалась одинаковой

У меня есть множество полигонов, и они могут перекрываться друг с другом, например: введите описание изображения здесь

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

введите описание изображения здесь

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

Я пытаюсь сделать это программно с помощью Python. В основном я хранил многоугольники в базе данных PostGIS и с помощью скрипта хочу получить их и изменить их.

Я очень новичок в ГИС, и поэтому это кажется сложной задачей.

Каков правильный способ сделать это? Есть ли алгоритм, который решает такие проблемы?

python,postgresql,gis,polygon,postgis,

3

Ответов: 2


0

Взгляните на ST_buffer и попробуйте передать подписанный float в качестве второго аргумента (градусы для уменьшения радиуса)

SELECT buffer(the_geom,-0.01) as geom

Будьте осторожны с отрицательными буферами, поскольку вы можете столкнуться с проблемами, если размер буфера превышает радиус, см. Здесь .


0 принят

Вот что я сделал:

Итерация по всем многоугольникам и обнаружение перекрывающихся многоугольников. Затем я переместил многоугольник в разных направлениях и нашел лучшее направление движения, вычислив минимальную результирующую перекрывающуюся область. Затем я просто переместил многоугольник в лучшем направлении, пока не будет перекрывающейся области.

питон, PostgreSQL, ГИС, многоугольник, PostGIS,
Похожие вопросы