Questo tipo di cose è fatto meglio con Spatialite e SQL.
Per prima cosa dovrai caricare i tuoi dati in un database Spatialite che può essere eseguito utilizzando il plug-in DBManager fornito con QGIS. Fai clic su Importa Layer/File button
.
Con i tuoi dati in un database puoi quindi eseguire la seguente query usando il SQL
pulsante. Dovrai solo cambiare i nomi delle colonne e delle tabelle in base ai tuoi dati.
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
Indica allo strumento di query la tua colonna ID id (id) e colonna geometrica (geomm), quindi fai clic su Carica.
Dovresti avere qualcosa del genere, una volta etichettato, ovviamente
La suddivisione della query
Stiamo unendo il livello su se stesso usando:
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id
AND intersects(a2.geomm, a1.geomm)
ma solo dove le geometrie si intersecano e gli ID non sono gli stessi, altrimenti finiamo con lo stesso record due volte per ogni poligono. Stiamo anche usando un LEFT OUTER JOIN
modo da includere i record che non si uniscono, cioè che non hanno vicini.
Nella parte selezionata:
SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours,
a1.pop,
a1.name,
a1.id,
a1.geomm
stiamo usando COALESCE
per convertire il NULLS
(nessun vicino) in un 0
altrimenti rimarranno NULL
.
Quindi abbiamo solo GROUP BY a1.id
per ottenere un singolo record per ogni poligono.