2010-11-24 17 views

Respuesta

7

Entonces, tengo que responder la pregunta yo mismo. Quizás ayudará a alguien.

Puede reparar un polígono utilizando la clase geos :: operation :: buffer :: BufferOp. P.ej.

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

Puede encontrar más buenas recetas en el Secrets of the JTS Topology Suite.

1

a menudo apuntan intersecciones están permitidos, lo que puede 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 puntos no están permitidas, mueva una de ellas una pequeña cantidad.

En mi experiencia, la mayoría de estas intersecciones provienen de una simplificación defectuosa del polígono, por lo que sería mejor volver a la fuente si es posible.

0

polígono Auto-cruzado no es válido. Por lo tanto, BufferOp puede dar un resultado inválido. No encontré ninguna forma de arreglar el polígono auto intersecado en geos. función st_makevalid en PostGIS utiliza geos. Por lo tanto, es posible investigar el código fuente.

+2

Vale la pena aclarar que "el polígono autointersecante no es válido", pero de acuerdo con OGC SFS. Es un polígono complejo válido en el mundo de la geometría. – mloskot

Cuestiones relacionadas