Remover polígonos duplicados usando ferramentas de código aberto

13

Eu tenho um shapefile contendo recursos com geometrias duplicadas, mas atributos diferentes (por exemplo, um polígono com o atributo XX e um polígono idêntico com o atributo XY). Quero identificar as duplicatas e escolher uma com os atributos corretos, excluindo a outra.

Eu tentei ferramentas de topologia no OpenJump / Kosmo, mas sem sucesso. Eles têm uma ferramenta 'excluir duplicados' que faz o que eu quero, exceto que parece excluir arbitrariamente um dos recursos, em vez de me deixar escolher qual manter.

Tenho acesso ao QGIS, OpenJUMP, Kosmo, etc. e posso instalar outras ferramentas de código aberto / gratuitas, se necessário.

Pensamentos?

Darren Cope
fonte

Respostas:

7

Além do PostGIS, você também pode usar um GIS topológico de código aberto (GRASS):

  1. Baixar e instalar
  2. Inicie e selecione o Gerenciador de localização, use a ferramenta para gerar um novo banco de dados de projeto a partir do seu arquivo SHAPE (chamado "Localização GRASS"), consulte aqui um guia passo a passo
  3. Importar o arquivo SHAPE
  4. Use a ferramenta "v.clean", que oferece uma série de opções
  5. Exportar mapa de volta ao formato de arquivo SHAPE com "v.out.ogr"

Nota: estamos planejando oferecer um WPS para isso, para que você possa polir seus dados através do nosso portal da Web.

markusN
fonte
Não acredito que o v.clean permita que os usuários identifiquem 'interativamente' e corrijam erros de topologia, um por um. Por favor corrija-me se eu estiver errado.
Darren Cope
Perdi que você queria fazer isso de forma interativa. Portanto, o digitalizador v.digit é a ferramenta a ser usada.
markusN
Markus, Uma rápida rotação no v.digit não parece fazer o que eu quero. Talvez você possa dar um exemplo de como eu realizaria minha tarefa usando o v.digit?
Darren Cope
1
Na verdade, apenas importar o shapefile para o GRASS cria uma camada de polígonos sobrepostos como a camada 2_polygon. Eu acho que isso deve ser o suficiente para eu continuar!
Darren Cope
3

É isso que eu costumo fazer nesses casos. Pelo que entendi, você terá que fazer uma verificação manual para decidir qual deles tem o atributo certo. Então eu costumo fazer isso em duas etapas. Primeiro, faço uma tabela ou uma exibição no PostGIS com os polígonos duplicados e, em seguida, abro essa tabela em um GIS da área de trabalho junto com a camada original na qual desejo excluir as duplicatas. Isso me levará às duplicatas através da minha tabela duplicada e eu posso excluir a tabela ou shapefile original ou o que for.

A consulta para encontrar as duplicatas será algo assim se você tiver um ID exclusivo chamado gid e uma coluna de geometria chamada the_geom:

create table duplicates as
select a.the_geom, a.gid, b.gid from mytable a, mytable b 
where ST_Equals(a.the_geom, b.the_geom) and a.gid!=b.gid;

Existem algumas variantes no ST_Equals, mas acho que o ST_Equals é o que você deseja. Isso fornecerá uma tabela com as geometrias duplicadas e o gid (id) da primeira e da segunda ocasião do polígono. Você receberá o mesmo par de duplicatas duas vezes, mas isso não deve importar, porque você quer que eles mostrem onde estão.

HTH Nicklas

Nicklas Avén
fonte
3

Se você estiver usando o PostGIS 1.5.x, verifique a função ST_HausdorffDistance ().
Geometrias duplicadas produzirão um valor 0. Use-o como as auto-junções mencionadas. Muito bonito para comparar formas de polígono.

eprand
fonte
0

Uma maneira mais simples de fazer. Calcule a área no GIS da área de trabalho e ordene por área ascendente ou descendente. Agora você terá que verificar todas as linhas para ver os objetos duplicados na sua tabela de atributos. É baseado em uma suposição de que você nunca tem exatamente a mesma área para objetos não duplicados, embora às vezes possa estar errado.

ThomasG77
fonte