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.
Eine andere Möglichkeit, dies zu tun, ist in GRASS (mithilfe der GRASS-Toolbox oder direkt in GRASS). Im folgenden Beispiel ist die Schicht EA eine Vektorebene mit Ländern und in der Attributtabelle eine Spalte mit der Bevölkerung pro Land. In diesem Beitrag finden Sie eine ausführlichere Erklärung.
Schritt 1) Erstellen Sie eine neue Ebene mit einer Attributtabelle, die mit Grenzen verknüpft ist, wobei zwei Spalten mit IDs von Polygonen links und rechts an die Grenzlinie grenzen
Schritt 2) Führen Sie eine SQL aus, um eine Tabelle zu erstellen, die die Länder-IDs mit der Summe der Bevölkerung aller Nachbarländer verknüpft:
Schritt 3) Verbinden Sie die neue Tabelle tmp mit der ursprünglichen Attributtabelle.
Die Attributtabelle Ihrer Vektorebene sollte jetzt eine zusätzliche Spalte mit der summierten Bevölkerung aller Nachbarländer enthalten.
quelle
Tolle Antwort von @Nathan . Ich habe versucht, dies mit Pyqgis und formschön zu tun. Schauen Sie sich diesen Beitrag an, um den Scirpt herunterzuladen und in QGIS auszuführen. Ein Vorteil dieser Methode wäre, dass Sie die Ergebnisse als Teil der Attributtabelle erhalten.
quelle