Domanda

C'è un modo per rimuovere autointersezioni da un poligono utilizzando GEOS?

È stato utile?

Soluzione

Quindi, devo rispondere alla domanda io stesso. Forse sarà aiutare qualcuno.

E 'possibile riparare un poligono con il GEOS :: funzionamento :: :: tampone di classe BufferOp. Per es.

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

Si possono trovare alcuni più buone ricette nelle segreti del JTS Topology Suite.

Altri suggerimenti

Spesso intersezioni punto sono permessi, in modo da poter modificare

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

a

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

dove punti 3 e 6 sono uguali. Se intersezioni punto non sono ammessi, spostare uno di loro una piccola quantità.

Nella mia esperienza, la maggior parte di tali intersezioni alcuni da una semplificazione poligono difettosa, quindi sarebbe meglio tornare alla fonte, se possibile.

Auto-intersecato poligono è valido. Così BufferOp può dare risultato non valido. Non ho trovato un modo per risolvere poligono auto-intersecata in GEOS. funzione st_makevalid in PostGIS utilizza GEOS. Così è possibile indagare il codice sorgente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top