Encontre o algoritmo de polígonos duplicados


8

Eu tenho um grupo de polígonos. Meu objetivo é encontrar os polígonos duplicados desse grupo de polígonos.

Usando o NetTopologySuite (uma porta c # do JTS), é possível comparar dois geometires e verificar se são iguais. O método da força bruta (comparar cada polígono com outro polígono) é a única ideia que me vem à cabeça, mas não é utilizável se houver um grande número de polígonos. Existe algum algoritmo que melhoraria a força bruta nesse caso?

Encontrei esse script que parece conter idéias para o que estou procurando (os comentários indicam uma abordagem de dividir e conquistar .. mas não há muitos detalhes nos comentários). Mas tenho que admitir que não consigo tirar nada disso :) .. Foi feito para o ArcView, com o qual não estou familiarizado.

Nota: Não estou procurando uma solução PostGIS / banco de dados como nesta pergunta . Estou procurando algo que possa ser integrado ao AutoCAD, Quantum GIS ou a esses produtos GIS de desktop através da personalização (c #, c ++, python etc.)


1
Eu imagino que uma modificação usando algo como toblerity.github.com/rtree ajudaria bastante. Construir um índice espacial e verificar se há duplicatas, enquanto a construção do índice
Peter Smith

@ PeterSmith - acho que é uma boa ideia! ..why que você não adiciona isso como uma resposta .. Eu acho NetTopologySuite tem RTREE built-in .. vai ter que cavar ..
Vinayan

Respostas:


4

Se os polígonos forem realmente idênticos e se você tiver uma maneira fácil de calcular sua área, apenas calcule a área de cada polígono, classifique por área e verifique apenas os polígonos com a área correspondente. Uma variante dessa idéia é classificar os polígonos na coordenada do ponto mais ao norte (quebrando os laços selecionando o ponto mais ao leste dos pontos empatados). Verifique apenas os polígonos cujos pontos mais ao norte correspondem. Se os polígonos variarem bastante, basta classificar o número de pontos.

Eu poderia continuar, mas você entendeu.


Llaves, essa idéia parece bem simples e fácil, mesmo sem ter nenhum outro software ou API de GIS.
vadivelan 12/09/12

1

Se os objetos de geometria que você está verificando são idênticos, que tal criar um dicionário das geometrias com a chave como geometria e o valor como identificador do objeto.

Você passa pela lista uma vez, adicionando valores ao dicionário para cada objeto. Verifique se a chave existe antes de adicionar e você será notificado se tiver uma geometria duplicada. Nesse ponto, mergulhe em um loop para corrigir o problema. Isso deve lhe dar uma passagem pelos objetos.


Parece muito interesting..but não estou certo de que seria work..I vai experimentá-lo e voltar ..
Vinayan

0

Depois de muita leitura, cheguei à conclusão de que é necessário um índice espacial . O comentário de @Peter Smith me fez olhar para Rtree .

Definição da wiki para RTree,

Árvores R são estruturas de dados em árvore usadas para métodos de acesso espacial, ou seja, para indexar informações multidimensionais, como coordenadas geográficas, retângulos ou polígonos

Então, criei um índice no NetTopologySuite e consultei o índice usando o envelope de cada recurso. As comparações foram, portanto, limitadas a muito poucos recursos.

Como isso foi feito usando o NTS está descrito nesta resposta .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.