Pergunta

Existe uma maneira de remover as auto-intercepções de um polígono usando GEOs?

Foi útil?

Solução

Então, eu tenho que responder à pergunta sozinho. Talvez isso ajude alguém.

Você pode reparar um polígono usando o GEOS :: Operação :: Buffer :: Bufferop Class. Por exemplo

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

Você pode encontrar mais algumas boas receitas no Segredos da suíte de topologia JTS.

Outras dicas

Muitas vezes são permitidas cruzamentos de pontos, para que você possa mudar

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

para

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

onde os pontos 3 e 6 são os mesmos. Se não forem permitidos cruzamentos de pontos, mova um deles uma pequena quantidade.

Na minha experiência, a maioria dessas interseções alguns é de uma simplificação de polígonos com defeito, por isso seria melhor voltar à fonte, se possível.

O polígono auto-intercalado é inválido. Assim, o buflorop pode dar resultado inválido. Não encontrei nenhuma maneira de consertar o polígono auto-intercalado em GEOs. Função ST_MakeValid no PostGIS usa GEOs. Portanto, é possível investigar o código -fonte.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top