Spatial Join in QGIS: Räumliche Verknüpfung erklärt
Veröffentlicht am

Ein Spatial Join kopiert die Felder eines Layers auf einen anderen, und zwar nach der Lage der Objekte, nicht nach einer gemeinsamen ID. Öffnen Sie in QGIS Vector > Data Management Tools > Join Attributes by Location… (Attribute nach Position verknüpfen), wählen Sie den Layer, der die neuen Felder bekommen soll, den Layer, aus dem sie stammen, und eine Regel wie „intersect“, und starten Sie das Werkzeug. Für die Frage „was liegt am nächsten“ nehmen Sie Join Attributes by Nearest, oder Sie tippen die ganze Aufgabe in einem Satz an AI Agent.
| Was Sie wollen | Werkzeug | Zeit im Test |
|---|---|---|
| Jedem Punkt den Namen der Fläche geben, in der er liegt | Join Attributes by Location | 0,21 s, 382 Schulen |
| Dasselbe, in einem Satz getippt | AI Agent | 22 s, Zählung und Nachbar zusammen |
| Punkte pro Fläche zählen oder summieren | Join Attributes by Location (Summary) | 0,02 s, 9 Flächen |
| Das nächste Objekt und seine Entfernung finden | Join Attributes by Nearest | 0,06 s, 382 Schulen |
Die Testdaten
Jede Zahl in diesem Leitfaden stammt aus einem einzigen Durchlauf mit echten offenen Daten für Lyon in Frankreich am 15. Oktober 2026:
- 9 Arrondissements (die Stadtbezirke) und 382 Schulen aus OpenStreetMap.
- 106 Straßenbahnhaltestellen aus OpenStreetMap.
- 103.910 Gebäude aus der IGN BD TOPO, der französischen nationalen topografischen Datenbank.
Alle Layer liegen in Lambert-93 (EPSG:2154), einem projizierten System in Metern. Die Zeiten stammen von QGIS 3.44 auf einem MacBook Air M4.
Methode 1: Join attributes by location
Das ist der klassische Spatial Join. Hier bekommt jede Schule den Namen ihres Arrondissements.
Das Werkzeug öffnen
Vector > Data Management Tools > Join Attributes by Location…. Sie können auch in der Processing-Toolbox (Ctrl+Alt+T) nach „join attributes“ suchen.
Die beiden Layer wählen
Join to features in ist der Layer, der die neuen Felder bekommt, hier schools. By comparing to ist der Layer, aus dem Sie sie nehmen, hier arrondissements.
Ein Prädikat ankreuzen
intersect ist der sichere Standard für Punkte in Polygonen. Der Abschnitt weiter unten zeigt, was jedes Kästchen bedeutet.
Felder und Join-Typ wählen
Behalten Sie bei Fields to add nur, was Sie brauchen, hier name. Stellen Sie Join type auf one-to-one und fügen Sie ein Präfix wie arr_ hinzu, damit das neue Feld leicht zu erkennen ist.
Ausführen
Lassen Sie Joined layer zunächst als temporären Layer, um das Ergebnis zu prüfen, und speichern Sie ihn dann als GeoPackage.

Kreuzen Sie Discard records which could not be joined nur an, wenn Sie die Nichttreffer verwerfen wollen. Lassen Sie es zuerst aus: Die leeren Zeilen zeigen, was schiefgelaufen ist.
Nehmen Sie es, wenn: Sie ein oder wenige Felder des Objekts wollen, in dem jedes Objekt liegt oder das es berührt.
Lassen Sie es, wenn: sich die Objekte nie berühren, etwa eine Schule und eine Straßenbahnhaltestelle. Das ist Methode 4.
Methode 2: AI Agent in einem Satz fragen
AI Agent ist unser QGIS-Plugin, das Aufgaben aus einer getippten Anfrage ausführt. Es liest Ihre Layernamen und Felder, wählt die Werkzeuge und führt sie in Ihrem Projekt aus.
Wir haben ihm Folgendes gegeben (auf Englisch), mit denselben Lyoner Layern:
Count the schools in each arrondissement, then give every school the name of its nearest tram stop and the distance to it in metres.
Es führte zwei QGIS-Processing-Werkzeuge aus, danach einen kurzen Python-Schritt, der die beiden neuen Felder in den Schul-Layer schrieb. Das Bedienfeld zeigte „Worked for 22 s“. Es fragte einmal nach der Erlaubnis, weil es das GeoPackage auf der Festplatte ändern wollte. Die Zählungen stimmten genau mit unserem manuellen Durchlauf überein: 382 Schulen, von 27 im 2. und 4. bis 56 im 5. Arrondissement.

Nehmen Sie es, wenn: Sie die Frage kennen, aber nicht wissen, welches der vier Join-Werkzeuge sie beantwortet, oder wenn Sie mehrere Schritte verketten.
Lassen Sie es, wenn: Sie jede Woche denselben Join ausführen. Speichern Sie ihn einmal als Modell oder Python-Skript.
Preis: Gratis-Tarif, ohne Karte. Pro kostet 49 € im Monat zzgl. MwSt.
Methode 3: Mit einem Spatial Join zählen und zusammenfassen
Methode 1 gibt jeder Schule ihren Bezirk. Die umgekehrte Frage, wie viele Schulen jeder Bezirk hat, braucht die Summary-Version.
Suchen Sie in der Processing-Toolbox nach Join attributes by location (summary). Legen Sie die Polygone unter Join to features in ab, die Punkte unter By comparing to, und wählen Sie unter Summaries to calculate die Statistiken: Anzahl, Summe, Mittelwert, Median, Minimum, Maximum und mehr. QGIS fügt pro Statistik ein Feld hinzu, benannt etwa osm_id_count.

Es summiert auch Zahlen. Bei den IGN-Gebäuden lieferte ein Durchlauf für jedes Arrondissement die Zahl der Gebäude und der darin erfassten Wohnungen: 9.474 Gebäude und 51.743 Wohnungen im 3. Arrondissement, in beiden der Höchstwert.
Für eine einfache Zählung macht Vector > Analysis Tools > Count Points in Polygon… dasselbe mit weniger Einstellungen.
Nehmen Sie es, wenn: die Antwort eine Zahl pro Fläche ist: Anzahl, Summe, Durchschnitt.
Lassen Sie es, wenn: Sie die Liste der Treffer selbst brauchen. Nehmen Sie Methode 1 mit one-to-many.
Methode 4: Join attributes by nearest
Wenn sich Objekte nie berühren, verknüpfen Sie sie über die Entfernung. Suchen Sie in der Processing-Toolbox nach Join attributes by nearest.
Setzen Sie Input layer auf schools, Input layer 2 auf tram_stops und Maximum nearest neighbors auf 1. QGIS fügt die Felder der Haltestelle hinzu, dazu ein Feld distance und die Koordinaten beider Enden.

Zwei Einstellungen verändern das Ergebnis:
- Maximum distance. Bei 300 m bekamen nur 86 Schulen eine Haltestelle. Die übrigen 296 blieben mit leeren Feldern in der Ausgabe, außer Sie kreuzen Discard records which could not be joined an.
- Maximum nearest neighbors. Bei 3 wurden aus den 382 Schulen 1.146 Zeilen, eine pro Schule und Haltestelle. Auch ein exakter Gleichstand fügt eine Zeile hinzu: Bei den 103.910 IGN-Gebäuden erhielten wir 103.911 Zeilen.
Die Entfernung ist die Luftlinie, nicht die Gehstrecke entlang der Straßen.
Nehmen Sie es, wenn: Sie fragen „was ist am nächsten“ und „wie weit“.
Lassen Sie es, wenn: Sie die Wegstrecke brauchen. Nehmen Sie die Werkzeuge der Netzwerkanalyse in der Processing-Toolbox.
Welches Prädikat ankreuzen
Das Prädikat ist die räumliche Regel, die einen Treffer entscheidet. QGIS liest es als „Layer A [Prädikat] Layer B“, wobei A der Layer ist, der die Felder bekommt.

Drei Regeln decken das meiste ab:
- intersect für Punkte in Polygonen und für alles, was sich nur berühren muss. Es erfasst auch Objekte auf der Grenze.
- are within, wenn das Objekt ganz innen liegen muss. Bei unseren Gebäuden lagen 112, die Lyon schneiden, nicht ganz in einem Arrondissement: 108 überschreiten die Stadtgrenze und 4 eine innere Grenze.
- contain für die Gegenrichtung, Polygone, die Punkte enthalten.
Sie können mehrere Kästchen ankreuzen. Ein Objekt trifft dann zu, wenn eines davon wahr ist.
One-to-one, one-to-many oder größte Überlappung
Ein Gebäude auf einer Grenze berührt zwei Bezirke. Der Join type entscheidet, was damit passiert. Bei den 46.250 IGN-Gebäuden, die Lyon schneiden:
| Join-Typ | Zeilen in der Ausgabe | Zeit |
|---|---|---|
| One-to-many (ein Objekt pro Treffer) | 46.254 | 1,13 s |
| Nur das erste passende Objekt (one-to-one) | 46.250 | 0,99 s |
| Nur die größte Überlappung (one-to-one) | 46.250 | 9,62 s |
One-to-many hat die 4 Gebäude verdoppelt, die eine innere Grenze überspannen. Das ist richtig für eine Trefferliste und falsch für jede Summe: Diese Gebäude würden doppelt gezählt.
„First matching“ behält den Treffer, den QGIS zuerst findet, ein Gebäude auf der Grenze kann also in jedem der beiden Bezirke landen. „Largest overlap“ wählt den Bezirk, der den größten Teil enthält. Das ist die faire Antwort, dauerte hier aber zehnmal länger.
KBS-Fallen
Ein falsches Koordinatenbezugssystem (KBS, englisch CRS) stoppt einen Join selten. Es verändert das Ergebnis stillschweigend.
- Gemischte KBS funktionieren bei Lage-Joins. Wir ließen die Schulen in WGS 84 (EPSG:4326) und die Bezirke in Lambert-93. QGIS reprojizierte im laufenden Betrieb, und alle 382 wurden zugeordnet.
- Entfernungen folgen den Einheiten des Eingabe-Layers. Führen Sie Join by nearest mit den WGS-84-Dateien aus, dann beträgt der Median der „distance“ 0,0071. Das sind Grad, keine Meter. Reprojizieren Sie beide Layer zuerst in ein projiziertes KBS in Metern, mit
Vector > Data Management Tools > Reproject Layer…. - Maximum distance nutzt dieselben Einheiten. Ein Wert von 300 in Grad deckt den ganzen Planeten ab.
Unser Leitfaden zu Was ist ein CRS erklärt Grad gegenüber Metern und wie Sie einen Layer reparieren, der am falschen Ort liegt.
Geschwindigkeit bei großen Layern
QGIS bewältigt Joins im Stadtmaßstab in Sekunden. Bei den 103.910 IGN-Gebäuden:
- One-to-one-Join mit den 9 Bezirken: 0,97 s aus einem GeoPackage.
- Derselbe Layer als Shapefile: 1,69 s. Nach
Vector > Data Management Tools > Create Spatial Index…1,04 s. - Nächste Straßenbahnhaltestelle für jedes Gebäude: 3,5 s.
- Größte Überlappung: 9,62 s, die langsamste Option.
Vier Gewohnheiten halten große Joins schnell:
- Arbeiten Sie mit GeoPackage. Es bringt einen räumlichen Index mit. Ein Shapefile braucht seine
.qix-Datei, die Create Spatial Index schreibt. - Fordern Sie weniger Felder an. Füllen Sie Fields to add aus, statt alles zu kopieren.
- Vermeiden Sie die größte Überlappung, außer Objekte auf der Grenze sind wirklich wichtig.
- Reparieren Sie zuerst die Geometrien. Ein ungültiges Polygon stoppt den Lauf mit „has invalid geometry“. Das Werkzeug Fix geometries in der Processing-Toolbox repariert es. Sie können auch Invalid feature filtering unter dem Schraubenschlüssel-Symbol neben dem Eingabe-Layer ändern.
Prüfen Sie auch, wo Ihre Punkte liegen. Nur 211 der 382 Schulpunkte fielen in ein IGN-Gebäude. Die übrigen markieren Spielplätze und Höfe, mit „Schule im Gebäude“ wären also 171 Schulen durchgefallen.
Das Wichtigste in Kürze
Nehmen Sie Join Attributes by Location mit intersect, um Punkten den Namen ihrer Fläche zu geben.
Nehmen Sie die Summary-Version, um pro Fläche zu zählen oder zu summieren, und Join Attributes by Nearest für das nächste Objekt und seine Entfernung.
Wählen Sie one-to-one für Summen und one-to-many, wenn Sie jeden Treffer brauchen.
Reprojizieren Sie vor jeder Entfernungsberechnung in ein KBS in Metern.
Wenn Sie nicht sicher sind, welches Werkzeug passt, beschreiben Sie AI Agent das gewünschte Ergebnis und prüfen Sie, was er gebaut hat.
Häufige Fragen
Was ist ein Spatial Join in QGIS?
Ein Spatial Join fügt die Felder eines Layers einem anderen hinzu, nach der Lage: innerhalb, berührend oder am nächsten. In QGIS sind die wichtigsten Werkzeuge Join Attributes by Location, seine Summary-Version für Zählungen und Statistiken und Join Attributes by Nearest für Entfernungen.
Wie verknüpfe ich Attribute nach Lage in QGIS?
Öffnen Sie Vector > Data Management Tools > Join Attributes by Location…. Legen Sie den Layer, der die Felder bekommt, unter Join to features in fest und den Quell-Layer unter By comparing to, kreuzen Sie intersect an, wählen Sie die Felder und einen one-to-one-Join-Typ und starten Sie das Werkzeug.
Was ist der Unterschied zwischen Join by location und Join by nearest?
Join by location verlangt, dass sich die Objekte nach dem angekreuzten Prädikat berühren oder überlappen. Join by nearest braucht keinen Kontakt: Es findet das nächste Objekt und fügt ein Entfernungsfeld hinzu, in den Einheiten des KBS des Eingabe-Layers.
Warum liefert mein Spatial Join leere Felder?
Meist erfüllen die Objekte das Prädikat nicht: Punkte knapp außerhalb der Polygone, ein zu strenges Prädikat wie „are within“ oder ungültige Geometrien. Prüfen Sie beide Layer auf der Karte, probieren Sie „intersect“ und führen Sie Fix Geometries aus. Auch ein fehlendes KBS an einem Layer verschiebt ihn.
Kann KI einen Spatial Join in QGIS ausführen?
Ja. AI Agent führt die QGIS-Werkzeuge aus einer getippten Anfrage aus. In unserem Lyon-Test erledigte er eine Zählung pro Bezirk und einen Nearest-Join aus einem einzigen Satz in 22 Sekunden, mit denselben Ergebnissen wie der manuelle Durchlauf.


