Loại điều này được thực hiện tốt nhất với Spatialite và SQL.
Trước tiên, bạn sẽ cần tải dữ liệu của mình vào cơ sở dữ liệu Spatialite có thể thực hiện bằng cách sử dụng plugin DBManager đi kèm với QGIS. Nhấp vào Nhập Layer/File button
.
Với dữ liệu của bạn vào cơ sở dữ liệu, sau đó bạn có thể chạy truy vấn sau bằng SQL
nút. Bạn sẽ chỉ phải thay đổi tên của các cột và bảng cho phù hợp với dữ liệu của bạn.
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
Nói cho công cụ truy vấn cột id duy nhất của bạn (id) và cột hình học (geomm), sau đó chỉ cần nhấp vào tải.
Bạn nên có một cái gì đó như thế này, một khi bạn dán nhãn nó tất nhiên
Phân tích truy vấn
Chúng tôi đang tham gia lớp vào chính nó bằng cách sử dụng:
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id
AND intersects(a2.geomm, a1.geomm)
nhưng chỉ khi hình học giao nhau và id không giống nhau, nếu không, chúng ta kết thúc với cùng một bản ghi hai lần cho mỗi đa giác. Chúng tôi cũng đang sử dụng LEFT OUTER JOIN
để chúng tôi bao gồm các hồ sơ không tham gia tức là không có hàng xóm.
Trong phần chọn:
SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours,
a1.pop,
a1.name,
a1.id,
a1.geomm
chúng tôi đang sử dụng COALESCE
để chuyển đổi NULLS
(không có hàng xóm) thành nơi 0
khác mà họ chỉ ở lại NULL
.
Sau đó, chúng tôi chỉ GROUP BY a1.id
để chúng tôi có được một bản ghi cho mỗi đa giác.