Gibt es eine Möglichkeit, ein Polygon, das Selbstüberschneidungen aufweist, in den Geos zu rekonstruieren?Wie repariere ich ein Polygon mit Selbstüberschneidung?
Antwort
Also muss ich die Frage selbst beantworten. Vielleicht wird es jemandem helfen.
Sie können ein Polygon mit der Klasse geos :: operation :: buffer :: BufferOp reparieren. Z.B.
geos::geom::Geometry * result =
geos::operation::buffer::BufferOp::bufferOp(polygon, 1.0);
Sie können einige weitere gute Rezepte im Polygon Secrets of the JTS Topology Suite.
Oft weisen Kreuzungen erlaubt sind, so können Sie
1 2 4
*--* *
| \ /|
| X |
| /\|
*--* *
6 5 3
zu
1 2 4
*--* *
| \ /|
| 3*6|
| /\|
*--* *
8 7 5
ändern, in dem die Punkte 3 und 6 gleich sind. Wenn Punktkreuzungen nicht erlaubt sind, verschiebe einen von ihnen um einen kleinen Betrag.
Nach meiner Erfahrung die meisten solcher Schnittpunkte einige von einer fehlerhaften Polygon-Vereinfachung, so wäre es besser, wenn möglich zurück zur Quelle gehen.
Selbstschnitten zu finden ist ungültig. Daher kann BufferOp ungültige Ergebnisse geben. Ich habe keine Möglichkeit gefunden, selbstgefügte Polygone in Geos zu reparieren. Die Funktion st_makevalid in PostGIS verwendet Geos. So ist es möglich, den Quellcode zu untersuchen.
Es ist zu klären, dass "sich selbst schneidende Polygon ist ungültig", aber nach OGC SFS. Es ist ein gültiges komplexes Polygon in der Welt der Geometrie. – mloskot