Как восстановить многоугольник с самопересечением?
есть ли способ удалить самопересечения из многоугольника с помощью 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. Таким образом, можно исследовать исходный код.