Как восстановить многоугольник с самопересечением?

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

3 ответов


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

вы можете восстановить полигон, используя класс geos::operation::buffer:: BufferOp. Е. Г.

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

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


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

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

to

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

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

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


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