Такі речі найкраще робити із Spatialite та SQL.
Спочатку вам потрібно буде завантажити дані в базу даних Spatialite, що може робити за допомогою плагіна DBManager, який постачається з QGIS. Клацніть Імпорт Layer/File button.
Зі своїми даними в базу даних ви можете запустити наступний запит за допомогою SQLкнопки. Вам просто доведеться змінити назви стовпців і таблиць відповідно до ваших даних.
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
Скажіть інструменту запиту свій унікальний стовпчик id (id) та стовпчик геометрії (geomm), а потім просто натисніть кнопку load.
Ви повинні мати щось подібне, як тільки ви позначите це, звичайно
Розбивка запитів
Ми приєднуємо шар до себе за допомогою:
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id
AND intersects(a2.geomm, a1.geomm)
але лише там, де геометрії перетинаються, а ідентичні дані не однакові, інакше ми закінчуємо тим самим записом двічі для кожного багатокутника. Ми також використовуємо LEFT OUTER JOINтак, щоб ми включали записи, які не приєднуються, тобто не мають сусідів.
У виділеній частині:
SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours,
a1.pop,
a1.name,
a1.id,
a1.geomm
ми використовуємо COALESCEдля того, щоб перетворити NULLS(без сусідів) в інший 0спосіб вони просто залишаються NULL.
Тоді ми просто GROUP BY a1.idтак, щоб отримати один запис на кожен багатокутник.