Dies geschieht am besten mit Spatialite und SQL.
Zuerst müssen Sie Ihre Daten in eine Spatialite-Datenbank laden, was mit dem im Lieferumfang von QGIS enthaltenen DBManager-Plugin möglich ist. Klicken Sie auf Importieren Layer/File button
.
Mit Ihren Daten in einer Datenbank können Sie dann die folgende Abfrage über die SQL
Schaltfläche ausführen . Sie müssen nur die Namen der Spalten und Tabellen ändern, um sie Ihren Daten anzupassen.
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
Teilen Sie dem Abfragetool Ihre eindeutige ID-Spalte (ID) und Geometriespalte (Geomm) mit und klicken Sie dann auf Laden.
Sie sollten so etwas haben, sobald Sie es natürlich beschriften
Die Aufschlüsselung der Abfragen
Wir verbinden die Ebene mit sich selbst mit:
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id
AND intersects(a2.geomm, a1.geomm)
aber nur dort, wo sich die Geometrien schneiden und die IDs nicht gleich sind, sonst erhalten wir zweimal denselben Datensatz für jedes Polygon. Wir verwenden auch a, LEFT OUTER JOIN
damit wir die Datensätze einschließen, die nicht beitreten, dh keine Nachbarn haben.
Im ausgewählten Teil:
SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours,
a1.pop,
a1.name,
a1.id,
a1.geomm
Wir verwenden COALESCE
, um die NULLS
(keine Nachbarn) in eine umzuwandeln, 0
sonst bleiben sie einfach NULL
.
Dann machen wir nur GROUP BY a1.id
so, dass wir für jedes Polygon einen einzigen Datensatz bekommen.