Przejdź do treści
AI Agent
QGIS
Tutorial

Złączenie przestrzenne w QGIS: po lokalizacji lub odległości

Opublikowano

Mapa ulic 8. dzielnicy Lyonu z czerwonymi punktami szkół, każdy połączony czarną linią z najbliższym niebieskim przystankiem tramwajowym, oraz napis 710 m, mediana odległości od szkoły w Lyonie do przystanku tramwajowego.

Złączenie przestrzenne kopiuje pola z jednej warstwy do drugiej na podstawie położenia obiektów, a nie wspólnego identyfikatora. W QGIS otwórz Vector > Data Management Tools > Join Attributes by Location…, wskaż warstwę, która ma dostać nowe pola, warstwę, z której je weźmiesz, i regułę, np. „intersect”, a potem uruchom narzędzie. Gdy pytasz „który jest najbliżej”, użyj Join Attributes by Nearest albo opisz całe zadanie jednym zdaniem w AI Agent.

Co chcesz zrobićNarzędzieCzas w naszym teście
Nadać każdemu punktowi nazwę obszaru, w którym leżyJoin Attributes by Location0,21 s, 382 szkoły
To samo, opisane jednym zdaniemAI Agent22 s, zliczanie i najbliższy obiekt naraz
Zliczyć lub zsumować punkty w obszarachJoin Attributes by Location (Summary)0,02 s, 9 obszarów
Znaleźć najbliższy obiekt i odległość do niegoJoin Attributes by Nearest0,06 s, 382 szkoły

Dane testowe

Każda liczba w tym poradniku pochodzi z jednego przebiegu na prawdziwych otwartych danych z Lyonu we Francji, wykonanego 15 października 2026 roku:

  • 9 dzielnic (arrondissements) i 382 szkoły z OpenStreetMap.
  • 106 przystanków tramwajowych z OpenStreetMap.
  • 103 910 budynków z IGN BD TOPO, francuskiej krajowej bazy danych topograficznych.

Wszystkie warstwy są w układzie Lambert-93 (EPSG:2154), czyli w układzie rzutowanym w metrach. Czasy pochodzą z QGIS 3.44 na MacBooku Air M4.

Metoda 1: Join attributes by location

To klasyczne złączenie przestrzenne. Tutaj każda szkoła dostaje nazwę swojej dzielnicy.

Otwórz narzędzie

Vector > Data Management Tools > Join Attributes by Location…. Możesz też wpisać „join attributes” w Przyborniku Processing (Ctrl+Alt+T).

Wybierz dwie warstwy

Join to features in to warstwa, która dostaje nowe pola, tutaj schools. By comparing to to warstwa, z której je bierzesz, tutaj arrondissements.

Zaznacz predykat

intersect to bezpieczna wartość domyślna dla punktów w poligonach. Sekcja poniżej pokazuje, co znaczy każde pole.

Wybierz pola i typ złączenia

W Fields to add zostaw tylko to, czego potrzebujesz, tutaj name. Ustaw Join type na jeden do jednego i dodaj prefiks, np. arr_, żeby nowe pole łatwo było znaleźć.

Uruchom

Zostaw Joined layer jako warstwę tymczasową, żeby najpierw sprawdzić wynik, a potem zapisz ją jako GeoPackage.

Okno Join attributes by location w QGIS. Join to features in: schools. Predicate: zaznaczone intersect. By comparing to: arrondissements. Fields to add: name. Join type: Take attributes of the first matching feature only (one-to-one). Joined field prefix: arr_.
Złączenie, które wykonaliśmy: szkoły dostają nazwę dzielnicy, w której leżą. Wszystkie 382 dopasowały się w 0,21 sekundy.

Zaznacz Discard records which could not be joined tylko wtedy, gdy chcesz usunąć nieudane dopasowania. Na początku zostaw to pole puste: puste wiersze pokażą, co poszło nie tak.

Użyj, gdy: chcesz jedno lub kilka pól z obiektu, w którym leży albo który dotyka każdy z twoich obiektów.

Pomiń, gdy: obiekty nigdy się nie stykają, jak szkoła i przystanek tramwajowy. To Metoda 4.

Metoda 2: Zapytaj AI Agent jednym zdaniem

AI Agent to nasza wtyczka do QGIS, która wykonuje zadania z wpisanego polecenia. Czyta nazwy warstw i pól, wybiera narzędzia i uruchamia je w twoim projekcie.

Wpisaliśmy to (po angielsku, z tymi samymi warstwami Lyonu):

Count the schools in each arrondissement, then give every school the name of its nearest tram stop and the distance to it in metres.

Agent uruchomił dwa narzędzia przetwarzania QGIS, a potem krótki krok w Pythonie, który zapisał dwa nowe pola w warstwie szkół. Panel pokazał „Worked for 22 s”. Raz poprosił o zgodę, bo zamierzał edytować plik GeoPackage na dysku. Jego wyniki zgadzały się dokładnie z naszym przebiegiem ręcznym: 382 szkoły, od 27 w 2. i 4. dzielnicy do 56 w 5.

QGIS z dzielnicami Lyonu wypełnionymi na pomarańczowo i punktami szkół oraz panelem AI Agent po prawej. Polecenie brzmi: Count the schools in each arrondissement, then give every school the name of its nearest tram stop and the distance to it in metres. Odpowiedź podaje liczbę szkół w każdej dzielnicy, razem 382, i informuje, że wszystkie 382 szkoły dostały pola nearest_tram i tram_distance_m, z odległościami od 49,6 do 4 949,2 m.
Te same dwa złączenia z jednego zdania. Odpowiedź zawiera link do nowej warstwy i listę zmian.

Użyj, gdy: znasz pytanie, ale nie wiesz, które z czterech narzędzi złączenia na nie odpowiada, albo łączysz kilka kroków.

Pomiń, gdy: to samo złączenie robisz co tydzień. Zapisz je raz jako model albo skrypt w Pythonie.

Cena: darmowy plan, bez karty. Pro kosztuje 49 € miesięcznie netto, bez VAT.

Metoda 3: Zliczanie i podsumowania w złączeniu przestrzennym

Metoda 1 daje każdej szkole jej dzielnicę. Odwrotne pytanie, ile szkół jest w każdej dzielnicy, wymaga wersji z podsumowaniem.

Wyszukaj Join attributes by location (summary) w Przyborniku Processing. Wstaw poligony do Join to features in, punkty do By comparing to i wybierz statystyki w Summaries to calculate: liczba, suma, średnia, mediana, minimum, maksimum i inne. QGIS dodaje jedno pole na statystykę, nazwane np. osm_id_count.

Mapa dziewięciu dzielnic Lyonu pokolorowanych od jasnożółtego do ciemnopomarańczowego według liczby szkół, każda z etykietą: 9e 38, 4e 27, 1e 33, 6e 41, 5e 56, 2e 27, 3e 54, 7e 53, 8e 53. Czerwone kropki oznaczają szkoły.
Szkoły w każdej dzielnicy z jednego złączenia z podsumowaniem: 0,02 sekundy.

Narzędzie sumuje też liczby. Na budynkach IGN jeden przebieg dał każdej dzielnicy liczbę budynków i zapisanych w nich mieszkań: 9 474 budynki i 51 743 mieszkania w 3. dzielnicy, największej pod obydwoma względami.

Do zwykłego zliczania Vector > Analysis Tools > Count Points in Polygon… robi to samo, z mniejszą liczbą ustawień.

Użyj, gdy: odpowiedzią jest liczba na obszar: ilość, suma, średnia.

Pomiń, gdy: potrzebujesz samej listy dopasowań. Użyj Metody 1 z typem jeden do wielu.

Metoda 4: Join attributes by nearest

Gdy obiekty nigdy się nie stykają, połącz je według odległości. Wyszukaj Join attributes by nearest w Przyborniku Processing.

Ustaw Input layer na schools, Input layer 2 na tram_stops, a Maximum nearest neighbors na 1. QGIS dodaje pola przystanku oraz pole distance i współrzędne obu końców.

Mapa ulic 8. dzielnicy Lyonu. Czerwone punkty szkół są połączone czarnymi liniami z najbliższym niebieskim przystankiem tramwajowym. Kilka szkół ma ten sam przystanek.
Każda szkoła połączona z najbliższym przystankiem tramwajowym. W całym Lyonie mediana wynosi 710 m, a 86 z 382 szkół leży w promieniu 300 m.

Wynik zmieniają dwa ustawienia:

  • Maximum distance. Przy 300 m tylko 86 szkół dostało przystanek. Pozostałe 296 zostało w wyniku z pustymi polami, chyba że zaznaczysz Discard records which could not be joined.
  • Maximum nearest neighbors. Przy 3 z 382 szkół zrobiło się 1 146 wierszy, po jednym na szkołę i przystanek. Dokładny remis też dodaje wiersz: na 103 910 budynkach IGN dostaliśmy 103 911 wierszy.

Odległość jest liczona w linii prostej, a nie jako droga pieszo ulicami.

Użyj, gdy: pytasz „który jest najbliżej” i „jak daleko”.

Pomiń, gdy: potrzebujesz odległości dojazdu. Użyj narzędzi Network analysis z Przybornika Processing.

Który predykat zaznaczyć

Predykat to reguła przestrzenna, która decyduje o dopasowaniu. QGIS czyta ją jako „warstwa A [predykat] warstwa B”, gdzie A to warstwa, która dostaje pola.

Schemat ośmiu relacji przestrzennych między czerwonym kształtem A i niebieskim kształtem B: intersect, mają wspólną dowolną część; contain, A zawiera całe B; are within, A leży wewnątrz B; equal, ta sama geometria; touch, mają tylko wspólną krawędź; overlap, ten sam typ ze wspólną częścią; cross, linia przechodzi przez obiekt; oraz no match, disjoint, nic się nie łączy.
Czerwony to warstwa, która dostaje pola, niebieski to warstwa, z którą porównujesz.

Trzy reguły wystarczają do większości prac:

  • intersect dla punktów w poligonach i dla wszystkiego, co musi tylko się stykać. Łapie też obiekty na granicy.
  • are within, gdy obiekt musi leżeć w całości wewnątrz. Spośród naszych budynków przecinających Lyon 112 nie leżało w całości w jednej dzielnicy: 108 przekracza granicę miasta, a 4 granicę wewnętrzną.
  • contain dla kierunku odwrotnego, czyli poligonów, które zawierają punkty.

Możesz zaznaczyć kilka pól. Obiekt pasuje wtedy, jeśli spełniony jest którykolwiek z warunków.

Jeden do jednego, jeden do wielu albo największe pokrycie

Budynek na granicy dotyka dwóch dzielnic. O jego losie decyduje Join type. Na 46 250 budynkach IGN, które przecinają Lyon:

Typ złączeniaWierszy w wynikuCzas
Jeden do wielu (obiekt na każde dopasowanie)46 2541,13 s
Tylko pierwszy pasujący obiekt (jeden do jednego)46 2500,99 s
Tylko największe pokrycie (jeden do jednego)46 2509,62 s

Typ jeden do wielu zdublował 4 budynki leżące na granicy wewnętrznej. To dobre dla listy dopasowań i złe dla każdej sumy: te budynki zostałyby policzone dwa razy.

„Pierwszy pasujący” zachowuje to dopasowanie, które QGIS napotka jako pierwsze, więc budynek na granicy może trafić do którejkolwiek dzielnicy. „Największe pokrycie” wybiera dzielnicę, w której leży większa część budynku, i to jest uczciwa odpowiedź, ale tutaj trwało dziesięć razy dłużej.

Pułapki CRS

Zły układ współrzędnych (CRS) rzadko zatrzymuje złączenie. Po cichu zmienia wynik.

  • Mieszane CRS działają przy złączeniach według położenia. Zostawiliśmy szkoły w WGS 84 (EPSG:4326), a dzielnice w Lambert-93. QGIS przeliczył układy w locie i wszystkie 382 się dopasowały.
  • Odległości zależą od jednostek warstwy wejściowej. Uruchom Join by nearest na plikach w WGS 84, a mediana „distance” wyjdzie 0,0071. To są stopnie, nie metry. Najpierw przeprojektuj obie warstwy do układu rzutowanego w metrach, przez Vector > Data Management Tools > Reproject Layer….
  • Maximum distance używa tych samych jednostek. Wartość 300 w stopniach obejmuje całą planetę.

Nasz poradnik o tym, czym jest układ współrzędnych (CRS), wyjaśnia stopnie i metry oraz to, jak naprawić warstwę, która leży w złym miejscu.

Szybkość na dużych warstwach

QGIS wykonuje złączenia w skali miasta w kilka sekund. Na 103 910 budynkach IGN:

  • Złączenie jeden do jednego z 9 dzielnicami: 0,97 s z GeoPackage.
  • Ta sama warstwa jako Shapefile: 1,69 s. Po Vector > Data Management Tools > Create Spatial Index… 1,04 s.
  • Najbliższy przystanek tramwajowy dla każdego budynku: 3,5 s.
  • Największe pokrycie: 9,62 s, najwolniejsza opcja.

Cztery nawyki utrzymują szybkość dużych złączeń:

  • Pracuj na GeoPackage. Ma indeks przestrzenny. Shapefile potrzebuje pliku .qix, który zapisuje Create Spatial Index.
  • Proś o mniej pól. Wypełnij Fields to add zamiast kopiować wszystko.
  • Unikaj największego pokrycia, chyba że obiekty na granicy naprawdę mają znaczenie.
  • Najpierw napraw geometrie. Niepoprawny poligon zatrzymuje przebieg z komunikatem „has invalid geometry”. Narzędzie Fix geometries w Przyborniku Processing go naprawia. Możesz też zmienić Invalid feature filtering pod ikoną klucza obok warstwy wejściowej.

Sprawdź też, gdzie leżą twoje punkty. Tylko 211 z 382 punktów szkół wpadło do budynku IGN. Reszta oznacza boiska i dziedzińce, więc warunek „szkoła wewnątrz budynku” pominąłby 171 szkół.

Co zapamiętać

Użyj Join Attributes by Location z intersect, żeby nadać punktom nazwę ich obszaru.

Użyj wersji Summary, żeby zliczać lub sumować w obszarach, a Join Attributes by Nearest, żeby znaleźć najbliższy obiekt i odległość do niego.

Wybierz jeden do jednego dla sum, a jeden do wielu, gdy potrzebujesz każdego dopasowania.

Przed każdą odległością przeprojektuj dane do CRS w metrach.

Jeśli nie wiesz, które narzędzie pasuje, opisz wynik, którego chcesz, w AI Agent i sprawdź, co zbudował.

Najczęstsze pytania

Czym jest złączenie przestrzenne w QGIS?

Złączenie przestrzenne dodaje pola jednej warstwy do drugiej na podstawie położenia: wewnątrz, stykanie się albo najbliższy obiekt. W QGIS główne narzędzia to Join Attributes by Location, jego wersja Summary do zliczania i statystyk oraz Join Attributes by Nearest do odległości.

Jak dołączyć atrybuty według położenia w QGIS?

Otwórz Vector > Data Management Tools > Join Attributes by Location…. Ustaw warstwę, która dostaje pola, w Join to features in, a warstwę źródłową w By comparing to, zaznacz intersect, wybierz pola i typ złączenia jeden do jednego, a potem uruchom narzędzie.

Czym różni się złączenie według położenia od złączenia najbliższego sąsiada?

Złączenie według położenia wymaga, żeby obiekty się stykały lub nakładały, zgodnie z zaznaczonym predykatem. Złączenie najbliższego sąsiada nie wymaga kontaktu: znajduje najbliższy obiekt i dodaje pole odległości, w jednostkach CRS warstwy wejściowej.

Dlaczego moje złączenie przestrzenne zwraca puste pola?

Zwykle obiekty nie spełniają predykatu: punkty leżą tuż poza poligonami, predykat jest zbyt ostry, np. „are within”, albo geometrie są niepoprawne. Sprawdź obie warstwy na mapie, spróbuj „intersect” i uruchom Fix Geometries. Brak CRS w jednej z warstw też przesuwa ją w złe miejsce.

Czy AI może zrobić złączenie przestrzenne w QGIS?

Tak. AI Agent uruchamia narzędzia QGIS na podstawie wpisanego polecenia. W naszym teście z Lyonem wykonał zliczanie na dzielnicę i złączenie z najbliższym obiektem z jednego zdania w 22 sekundy, z takimi samymi wynikami jak przebieg ręczny.

Wypróbuj AI Agent w QGIS za darmo, bez karty

Napisane przezTerraLab
·12 min read
Kontakt