Como dissolver polígonos do shapefile usando ferramentas de código aberto?

10

No meu projeto atual, estou visualizando dados em um mapa representando alguns valores para cada área administrativa de um país. Recebi um shapefile desse país, que estou convertendo para o GeoJSON para uso com o PolyMaps. Agora eu tenho o requisito de agrupar várias áreas em áreas maiores, já que não há dados para algumas partes menores, mas dados agregados para partes grandes podem ser adquiridos. Esses clusters são predefinidos (por exemplo, A + B + C = D), então achei que seria mais fácil produzir um shapefile em cluster e convertê-lo em GeoJSON posteriormente.

Mas como crio um cluster desse tipo, de preferência automatizado e com ferramentas de código aberto? Qualquer outra maneira sensata também é bem-vinda.

Nikolai Prokoschenko
fonte

Respostas:

5

Você sempre pode usar uma ferramenta de código aberto como o QGIS para abrir seus recursos de shapefile e mesclar usando a ferramenta interna "mesclar recursos selecionados" (basta selecionar recursos, clicar mesclar, selecionar atributos a serem herdados para o novo recurso mesclado).

É claro que isso não faz muito sentido se estamos falando de centenas ou milhares de fusões. Eu mesmo estava pensando no outro dia se é possível mesclar recursos "por atributo" no QGIS?

Edição: Ok, eu sou estúpido, se você tiver um atributo comum para todos os recursos que você vai "agrupar" (como um nome de província ou município), esse seria o caso da ferramenta de dissolução. Abra seu shapefile, escolha dissolver (no QGIS, localizado em Vetor> Ferramentas de geoprocessamento> Dissolver), selecione a coluna com o nome comum mencionado acima e inicie o processo. Espero que isso (se eu não te entendi mal) resulte no que você estava procurando.

SAnderka
fonte
Em geral, bons conselhos, e se tudo se resumir ao trabalho manual, encontrarei alguém que criará esses arquivos de forma para mim com o QGIS, como você descreveu. No entanto, eu gostaria de poder definir esses clusters (por exemplo, via códigos NUTS: mesclar FR413 e FR411 em algo chamado _FRX1) e, em seguida, executar um script que geraria esses shapefiles agrupados. Quero poder corrigir erros ou acomodar alterações aceleradas sem a sobrecarga de uma ferramenta da GUI. É perfeitamente possível que esses clusters sejam definidos pelos usuários finais algum dia, por isso preciso de um pouco de flexibilidade.
Nikolai Prokoschenko
Eu nunca o uso, mas acho que você pode usar o console para fazer tudo no QGIS, portanto, não há necessidade da GUI. Você também sempre precisará definir esses clusters em algum tipo de tabela, mesmo se confiar completamente em uma solução com script. Portanto, você pode evitar mexer com o seu shapefile ingressando nesta tabela e dissolvendo-o. Eu acho que isso também seria programável?
SAnderka
perfeitamente possível, sou um novato em tudo o que é GIS. Vou analisar os scripts do QGIS, obrigado.
Nikolai Prokoschenko
2

Para um trabalho menos manual, você pode dar uma olhada no SpatiaLite. Você pode importar shapefiles facilmente usando, por exemplo,

spatialite> .loadshp ~/maps/areas areas iso-8859-15
spatialite> UPDATE areas SET Geometry = SetSrid(Geometry,4326);
spatialite> SELECT RecoverGeometryColumn('areas','Geometry',4326,'POLYGON',2);

Depois, para a parte dissolvente:

Eu gostaria de poder definir esses clusters (por exemplo, via códigos NUTS: mesclar FR413 e FR411 em algo chamado _FRX1)

A função que você precisa aqui é GUnion (). Você pode definir seus "clusters" em uma segunda tabela. Em seguida, você pode ingressar na tabela de cluster e área e usar GUnion () com GROUP BY para criar a tabela union_ final.

Você pode exportar para o shapefile usando .dumpshp

spatialite> .dumpshp union_table Geometry new_shapefile iso-8859-15 POLYGON

Se você precisar do GeoJSON, poderá converter o arquivo agora.

Você pode escrever um script curto, por exemplo, em Python, que lida com todas essas cargas, junções e despejos.

underdark
fonte
Parece muito promissor, vou experimentar! Obrigado! Você poderia explicar o que as linhas UPDATEe SELECTfazem?
Nikolai Prokoschenko