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

StackOverflow https://stackoverflow.com/questions/4267956

  •  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. Так что можно исследовать исходный код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top