2010-11-24 8 views

Antwort

7

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.

1

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.

0

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.

+2

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