Eu tenho uma camada vetorial de polígono representando a área inundada em uma inundação. A camada foi produzida de tal maneira que algumas áreas são compostas por vários polígonos menores que tocam (veja a captura de tela abaixo, denominada "dados originais").
Eu gostaria de dissolver os polígonos onde eles tocam. Se eu usar a ferramenta de geoprocessamento dissolve no fTools do QGIS, que usa a biblioteca GEOS, obtive alguns resultados inesperados (consulte "dissolver com o QGIS fTools"). Parece que o GEOS não usa um limite para determinar se os polígonos estão tocando, conforme mencionado nestes problemas:
http://trac.osgeo.org/qgis/ticket/3126
http://trac.osgeo.org/qgis/ticket/3184
http://hub.qgis.org/issues/2806
A mesma abordagem no ArcGIS fornece o resultado esperado (consulte "dissolver com o ArcGIS 10.1").
Aparentemente, esse é um "recurso" do GEOS, e não um bug. Existe alguma maneira de corrigir os dados que eu tenho para produzir o resultado esperado? Uma pequena perda de precisão (alguns cm?) Pode ser aceitável para mim. Idealmente, a solução seria algo que eu poderia escrever em um plug-in QGIS, como uma etapa de pré-processamento.
Pergunta relacionada (sem respostas): Como definir o valor de tolerância da ferramenta de Geoprocessamento no QGIS?
Link para dados de amostra como um shapefile: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip
Respostas:
Nesse caso, parece que você precisa ajudar a ferramenta de dissolução, corrigindo primeiro a topologia. Veja como você pode fazer isso no GRASS.
Quando você carrega o shapefile, é assim que o GRASS o vê:
Cada cruz marca uma área. Você pode ver que existem algumas cruzamentos nas linhas de limite: Estes são os polígonos da fita causados pelo ligeiro deslocamento entre as linhas de limite.
Remova os polígonos da tira formados pelas lacunas entre os polígonos reais:
Encaixe as linhas de limite:
Quebre as linhas de limite nas novas interseções:
Remova as linhas de limite agora duplicadas:
Dissolver os polígonos
Et voilà:
fonte
Use o comando GRASS GIS v.dissolve (no plugin Sextante -> Comandos GRASS -> Vetor)
Se eu rapidamente reproduzir o seu exemplo:
O resultado com v.dissolve:
Explicação
O problema é fácil de entender. Um shapefile não tem topologia, se duas áreas compartilharem uma borda comum, essa borda seria digitalizada duas vezes e também armazenada em duplicata.
Você vê isso claramente quando tenta editar o shapefile:
GRIS GIS (como ArcGIS) é um GIS topológico. Quando você importa o shapefile no GRASS, a camada resultante possui uma topologia: a borda comum entre duas áreas existe uma vez e é compartilhada.
Por esse motivo, quando você quiser dissolver um arquivo de forma ( dissolver dois limites ), poderá encontrar problemas (no QGIS, GvSIG, OpenJUMP ou no antigo ArcView 3.x), consulte ArcUserI: Entendendo a topologia e os arquivos de forma .
No GRASS, v.dissolve é projetado para dissolver limites comuns entre áreas com o mesmo número de categoria
fonte
v.dissolve
possui um parâmetro de tolerância, que soluciona o problema do OP.v.dissolve
, parece funcionar, exceto que "preenche" o pequeno quadrado no meio dos recursos. i.stack.imgur.com/AA59l.png