Este tipo de cosas se hacen mejor con Spatialite y SQL.
Primero tendrá que cargar sus datos en una base de datos de Spatialite, lo que puede hacerse utilizando el plugin DBManager que viene con QGIS. Haga clic en el botón Importar Layer/File button
.
Con sus datos en una base de datos, puede ejecutar la siguiente consulta utilizando la función SQL
botón. Sólo tendrá que cambiar los nombres de las columnas y las tablas para adaptarlos a sus datos.
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
Indique a la herramienta de consulta su columna de identificación única (id) y la columna de geometría (geomm), y luego simplemente haga clic en cargar.
Deberías tener algo así, una vez que lo etiquetes por supuesto
El desglose de la consulta
Vamos a unir la capa sobre sí misma utilizando:
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id
AND intersects(a2.geomm, a1.geomm)
pero sólo cuando las geometrías se cruzan y los ids no son los mismos, de lo contrario terminamos con el mismo registro dos veces para cada polígono. También utilizamos un LEFT OUTER JOIN
para que incluyamos los registros que no se unen, es decir, que no tienen vecinos.
En la parte de selección:
SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours,
a1.pop,
a1.name,
a1.id,
a1.geomm
estamos usando COALESCE
para convertir el NULLS
(sin vecinos) en un 0
si no, se quedan NULL
.
Entonces sólo GROUP BY a1.id
para que obtengamos un único registro para cada polígono.