Как отремонтировать многоугольник с самопересечением? - PullRequest
6 голосов
/ 24 ноября 2010

Есть ли способ удалить самопересечения из многоугольника с помощью GEOS?

Ответы [ 3 ]

7 голосов
/ 08 декабря 2010

Итак, я должен ответить на вопрос сам. Может быть, это кому-нибудь поможет.

Вы можете восстановить полигон с помощью класса geos :: operation :: buffer :: BufferOp. Э.Г.

geos::geom::Geometry * result = 
                       geos::operation::buffer::BufferOp::bufferOp(polygon, 1.0);

Вы можете найти еще несколько хороших рецептов в Секреты пакета топологии JTS.

1 голос
/ 07 ноября 2011

Самопересекающийся многоугольник недействителен.Таким образом, BufferOp может дать неверный результат.Я не нашел способа исправить самопересекающийся многоугольник в гео.Функция st_makevalid в PostGIS использует geos.Так что можно исследовать исходный код.

1 голос
/ 24 ноября 2010

Часто разрешены пересечения точек, поэтому вы можете изменить

1  2   4
*--*   *       
|   \ /|
|    X |
|   / \|
*--*   *
6  5   3

до

1  2   4
*--*   *       
|   \ /|
|   3*6|
|   / \|
*--*   *
8  7   5

, где точки 3 и 6 совпадают. Если пересечения точек не разрешены, переместите одно из них на небольшое количество.

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

...