Este tipo de cosas se realiza mejor con Spatialite y SQL.
Primero, deberá cargar sus datos en una base de datos de Spatialite, lo que puede hacer utilizando el complemento DBManager que se incluye con QGIS. Haz clic en Importar Layer/File button.
Con sus datos en una base de datos, puede ejecutar la siguiente consulta con el SQLbotón. Solo tendrá que cambiar los nombres de las columnas y tablas para adaptarlas 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), luego haga clic en cargar.
Deberías tener algo como esto, una vez que lo etiquetes, por supuesto
El desglose de consultas
Estamos uniendo la capa sobre sí misma usando:
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id
AND intersects(a2.geomm, a1.geomm)
pero solo donde las geometrías se cruzan y los identificadores no son iguales, de lo contrario terminamos con el mismo registro dos veces para cada polígono. También estamos utilizando a LEFT OUTER JOINpara incluir los registros que no se unen, es decir, no tienen vecinos.
En la parte seleccionada:
SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours,
a1.pop,
a1.name,
a1.id,
a1.geomm
estamos usando COALESCEpara convertir el NULLS(sin vecinos) en uno de lo 0contrario simplemente se quedan NULL.
Luego solo GROUP BY a1.idpara que obtengamos un solo registro para cada polígono.