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


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

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

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

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

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

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

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

2 3

2 ответа:

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

SELECT buffer(the_geom,-0.01) as geom

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

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

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