Question

Y at-il un moyen de supprimer l'auto-intersections d'un polygone en utilisant GEOS?

Était-ce utile?

La solution

Alors, je dois répondre à la question moi-même. Peut-être qu'il va aider quelqu'un.

Vous pouvez réparer un polygone en utilisant GEOS :: opération :: :: tampon classe BufferOp. Par exemple.

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

Vous pouvez trouver plus de bonnes recettes dans les Secrets du JTS Topology Suite.

Autres conseils

Souvent, les intersections de points sont autorisés, de sorte que vous pouvez changer

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

à

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

où les points 3 et 6 sont les mêmes. Si les intersections de points ne sont pas autorisés, déplacer l'un d'entre eux une petite quantité.

Dans mon expérience, la plupart de ces intersections certains d'une simplification du polygone défectueux, donc il serait préférable de revenir à la source, si possible.

polygone auto-intersectée est invalide. Ainsi BufferOp peut donner résultat non valide. Je ne trouve aucun moyen de fixer un polygone auto-recoupée dans GEOS. fonction st_makevalid dans PostGIS utilise geos. Il est donc possible d'étudier le code source.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top