Есть ли способ восстановить многоугольник, который имеет самопересечения, в геостационарных условиях?Как переделать многоугольник с самопересечением?
ответ
Итак, я должен сам ответить на вопрос. Может быть, это поможет кому-то.
Вы можете отремонтировать многоугольник, используя класс geos :: operation :: buffer :: BufferOp. Например.
geos::geom::Geometry * result =
geos::operation::buffer::BufferOp::bufferOp(polygon, 1.0);
Вы можете найти несколько хороших рецептов в Secrets of the JTS Topology Suite.
Часто указывают перекрестки разрешены, так что вы можете изменить
1 2 4
*--* *
| \ /|
| X |
| /\|
*--* *
6 5 3
в
1 2 4
*--* *
| \ /|
| 3*6|
| /\|
*--* *
8 7 5
где пункты 3 и 6 являются одинаковыми. Если пересечения точек не разрешены, переместите одну из них на небольшую сумму.
По моему опыту, большинство таких перекрестков некоторые из ошибочного упрощения многоугольника, поэтому было бы лучше вернуться к источнику, если это возможно.
Само-пересекались многоугольник является недействительным. Таким образом BufferOp может дать неверный результат. Я не нашел способа исправить самопересекающийся многоугольник в геосфере. Функция st_makevalid в PostGIS использует геосферы. Таким образом, можно исследовать исходный код.
Необходимо уточнить, что «самопересекающийся многоугольник недействителен», но в соответствии с OGC SFS. Это допустимый сложный многоугольник в мире геометрии. – mloskot 2011-11-07 12:02:26