Как отремонтировать многоугольник с самопересечением?
-
28-09-2019 - |
Вопрос
Есть ли способ удалить самопересечения от многоугольника с использованием GEOS?
Решение
Итак, я должен ответить на вопрос сам. Может быть, это поможет кому-то.
Вы можете восстановить многоугольник, используя The Geos :: Opeating :: Buffer :: Cufferop. Например
geos::geom::Geometry * result =
geos::operation::buffer::BufferOp::bufferOp(polygon, 1.0);
Вы можете найти более хорошие рецепты в Секреты Topology Suite JTS.
Другие советы
Часто точечные пересечения разрешены, чтобы вы могли изменить
1 2 4
*--* *
| \ /|
| X |
| / \|
*--* *
6 5 3
к
1 2 4
*--* *
| \ /|
| 3*6|
| / \|
*--* *
8 7 5
где точки 3 и 6 одинаковы. Если точечные пересечения не допускаются, переместите одну из них небольшую сумму.
По моему опыту, большинство таких пересечений некоторых из неисправного упрощения многоугольника, поэтому было бы лучше вернуться к источнику, если это возможно.
Самопересеченный многоугольник недействителен. Таким образом, буфероп может дать неверный результат. Я не нашел никакого способа исправить самооценку многоугольника в Геосе. ST_Makevalid Функция в Postgis использует GEOS. Так что можно исследовать исходный код.