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 SQL
botó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 JOIN
para 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 COALESCE
para convertir el NULLS
(sin vecinos) en uno de lo 0
contrario simplemente se quedan NULL
.
Luego solo GROUP BY a1.id
para que obtengamos un solo registro para cada polígono.