2010-11-24 4 views

ответ

7

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

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

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

Вы можете найти несколько хороших рецептов в Secrets of the JTS Topology Suite.

1

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

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

в

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

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

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

0

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

+2

Необходимо уточнить, что «самопересекающийся многоугольник недействителен», но в соответствии с OGC SFS. Это допустимый сложный многоугольник в мире геометрии. – mloskot 2011-11-07 12:02:26