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.
Otra forma de hacerlo es en GRASS (usando la caja de herramientas de GRASS o directamente en GRASS). En el siguiente ejemplo, la capa EA es una capa vectorial con países y en la tabla de atributos una columna con la población por país. Vea esta publicación para una explicación más detallada.
Paso 1) Cree una nueva capa con una tabla de atributos vinculada a los límites, con dos columnas con ID de polígonos que bordean la línea de límite a la izquierda y a la derecha respectivamente
Paso 2) Ejecute un SQL para crear una tabla que vincule los ID de país con la suma de la población de todos los países vecinos:
Paso 3) Unir la nueva tabla tmp con la tabla de atributos original.
La tabla de atributos de su capa vectorial ahora debería tener una columna adicional con la población sumada de todos los países vecinos.
fuente
Gran respuesta de @Nathan . Intenté hacer esto usando pyqgis y bien proporcionado. Echa un vistazo a esta publicación para descargar el scirpt y ejecutarlo en QGIS. Una ventaja de este método sería que obtiene los resultados como parte de la tabla de atributos.
fuente