Pregunta

¿Hay una manera de quitar autointersecciones de un polígono usando GEOS?

¿Fue útil?

Solución

Por lo tanto, tengo que responder a la pregunta a mí mismo. Tal vez pueda ayudar a alguien.

Se puede reparar un polígono usando los geos :: operación :: :: tampón clase BufferOp. Por ejemplo.

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

Puede encontrar más buenas recetas en las href="http://tsusiatsoftware.net/jts/files/jts_secrets_foss4g2007.pdf" rel="nofollow"> Secretos

Otros consejos

A menudo se les permite intersecciones de punto, para que pueda cambiar

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

a

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

donde los puntos 3 y 6 son los mismos. Si las intersecciones de punto no se les permite, mover uno de ellos una pequeña cantidad.

En mi experiencia, la mayoría de estas intersecciones algunos de una simplificación poligonal defectuoso, por lo que sería mejor volver a la fuente si es posible.

Auto-intersectado polígono es válido. Por lo tanto BufferOp puede dar resultado no válido. No he encontrado ninguna manera de fijar polígono auto-intersectado en GEOS. st_makevalid función de PostGIS utiliza GEOS. Por lo tanto, es posible investigar el código fuente.

scroll top