Esse tipo de coisa é melhor feito com Spatialite e SQL.
Primeiro, você precisará carregar seus dados em um banco de dados Spatialite, o que pode ser feito usando o plug-in DBManager que acompanha o QGIS. Clique no botão Importar Layer/File button
.
Com seus dados em um banco de dados, você pode executar a seguinte consulta usando o SQL
botão Você apenas precisará alterar os nomes das colunas e tabelas para se adequar aos seus dados.
SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours,
a1.pop,
a1.name,
a1.id,
a1.geomm FROM areas a1
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id
AND intersects(a2.geomm, a1.geomm)
GROUP BY a1.id
Informe a ferramenta de consulta sobre sua coluna de identificação exclusiva (id) e a coluna de geometria (geomm) e clique em carregar.
Você deveria ter algo assim, depois de rotular, é claro
A divisão da consulta
Estamos juntando a camada a ela mesma usando:
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id
AND intersects(a2.geomm, a1.geomm)
mas apenas onde as geometrias se cruzam e os IDs não são os mesmos; caso contrário, terminamos com o mesmo registro duas vezes para cada polígono. Também estamos usando um LEFT OUTER JOIN
para incluir os registros que não se juntam, ou seja, não têm vizinhos.
Na parte selecionada:
SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours,
a1.pop,
a1.name,
a1.id,
a1.geomm
estamos usando COALESCE
para converter NULLS
(sem vizinhos) em um 0
caso contrário eles simplesmente ficam NULL
.
Então, apenas GROUP BY a1.id
obtemos um único registro para cada polígono.
Outra maneira de fazer isso é no GRASS (usando a caixa de ferramentas GRASS ou diretamente no GRASS). No exemplo abaixo, a camada EA é uma camada vetorial com países e, na tabela de atributos, uma coluna com a população por país. Veja este post para uma explicação mais detalhada.
Etapa 1) Crie uma nova camada com a tabela de atributos vinculada aos limites, com duas colunas com IDs de polígonos que delimitam a linha do limite à esquerda e à direita, respectivamente
Etapa 2) Execute um SQL para criar uma tabela que vincule os IDs do país à soma da população de todos os países vizinhos:
Etapa 3) Associe a nova tabela tmp à tabela de atributos original.
A tabela de atributos da sua camada vetorial agora deve ter uma coluna extra com a população resumida de todos os países vizinhos.
fonte
Ótima resposta de @Nathan . Eu tentei fazer isso usando pyqgis e bem torneado. Confira este post para baixar o scirpt e executá-lo no QGIS. Uma vantagem desse método seria obter os resultados como parte da tabela de atributos.
fonte