Comment réparer un polygone avec l'auto-intersection?
-
28-09-2019 - |
Question
Y at-il un moyen de supprimer l'auto-intersections d'un polygone en utilisant GEOS?
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.