Lewati ke konten
AI Agent
QGIS
Tutorial

Cara Spatial Join di QGIS: Lokasi, Terdekat, atau AI

Diterbitkan

Peta jalan Arrondissement ke-8 Lyon dengan titik sekolah merah, masing-masing dihubungkan garis hitam ke halte trem biru terdekat, dan teks 710 m, median distance from a Lyon school to a tram stop.

Spatial join menyalin field dari satu layer ke layer lain berdasarkan posisi fitur, bukan berdasarkan ID yang sama. Di QGIS, buka Vector > Data Management Tools > Join Attributes by Location…, pilih layer yang akan menerima field baru, layer sumber field tersebut, dan satu aturan seperti "intersect", lalu jalankan. Untuk pertanyaan "mana yang paling dekat", gunakan Join Attributes by Nearest, atau ketik seluruh tugasnya dalam satu kalimat ke AI Agent.

Yang Anda inginkanToolWaktu pada pengujian kami
Beri setiap titik nama wilayah tempatnya beradaJoin Attributes by Location0,21 s, 382 sekolah
Hal yang sama, diketik dalam satu kalimatAI Agent22 s, hitung dan terdekat sekaligus
Hitung atau jumlahkan titik per wilayahJoin Attributes by Location (Summary)0,02 s, 9 wilayah
Cari fitur terdekat dan jaraknyaJoin Attributes by Nearest0,06 s, 382 sekolah

Data uji

Semua angka dalam panduan ini berasal dari satu kali pengujian dengan data terbuka nyata untuk Lyon, Prancis, pada 15 Oktober 2026:

  • 9 arrondissement (distrik kota) dan 382 sekolah dari OpenStreetMap.
  • 106 halte trem dari OpenStreetMap.
  • 103.910 bangunan dari IGN BD TOPO, basis data topografi nasional Prancis.

Semua layer memakai Lambert-93 (EPSG:2154), sistem proyeksi dengan satuan meter. Waktu eksekusi berasal dari QGIS 3.44 di MacBook Air M4.

Metode 1: Join attributes by location

Ini spatial join yang paling klasik. Di sini, setiap sekolah mendapat nama arrondissement-nya.

Buka tool-nya

Vector > Data Management Tools > Join Attributes by Location…. Anda juga bisa mencari "join attributes" di Processing Toolbox (Ctrl+Alt+T).

Pilih dua layer

Join to features in adalah layer yang menerima field baru, di sini schools. By comparing to adalah layer sumber field tersebut, di sini arrondissements.

Centang satu predikat

intersect adalah pilihan aman untuk titik dalam poligon. Bagian di bawah menjelaskan arti tiap kotak.

Pilih field dan jenis join

Di Fields to add, simpan hanya yang Anda perlukan, di sini name. Atur Join type ke one-to-one, lalu tambahkan prefiks seperti arr_ supaya field baru mudah dikenali.

Jalankan

Biarkan Joined layer sebagai layer sementara untuk memeriksa hasilnya dulu, lalu simpan sebagai GeoPackage.

Dialog Join attributes by location di QGIS. Join to features in: schools. Predicate: intersect dicentang. 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_.
Join yang kami jalankan: sekolah mendapat nama arrondissement tempatnya berada. Ke-382 sekolah cocok dalam 0,21 detik.

Centang Discard records which could not be joined hanya jika Anda ingin membuang yang tidak cocok. Awalnya biarkan kosong: baris kosong menunjukkan apa yang salah.

Pakai saat: Anda ingin satu atau beberapa field dari fitur tempat setiap objek berada atau bersentuhan.

Jangan pakai saat: fitur tidak pernah bersentuhan, seperti sekolah dan halte trem. Itu Metode 4.

Metode 2: Minta AI Agent dalam satu kalimat

AI Agent adalah plugin QGIS kami yang menjalankan tugas dari permintaan yang diketik. Ia membaca nama layer dan field Anda, memilih tool, dan menjalankannya di proyek Anda.

Kami memberinya perintah ini (dalam bahasa Inggris), dengan layer Lyon yang sama sudah dimuat:

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

Ia menjalankan dua tool processing QGIS, lalu satu langkah Python singkat yang menulis dua field baru ke layer sekolah. Panel menampilkan "Worked for 22 s". Ia meminta izin satu kali, karena akan mengubah GeoPackage di disk. Hitungannya sama persis dengan hasil manual kami: 382 sekolah, dari 27 di arrondissement ke-2 dan ke-4 sampai 56 di arrondissement ke-5.

QGIS dengan arrondissement Lyon berwarna oranye dan titik sekolah, serta panel AI Agent di sisi kanan. Permintaannya berbunyi: Count the schools in each arrondissement, then give every school the name of its nearest tram stop and the distance to it in metres. Jawabannya memuat jumlah per arrondissement, total 382 sekolah, dan menyebut bahwa ke-382 sekolah mendapat nearest_tram dan tram_distance_m, dengan jarak 49,6 sampai 4.949,2 m.
Dua join yang sama dari satu kalimat. Jawabannya menautkan ke layer baru dan mendaftar apa yang berubah.

Pakai saat: Anda tahu pertanyaannya tetapi tidak tahu dari empat tool join mana yang menjawabnya, atau Anda merangkai beberapa langkah.

Jangan pakai saat: Anda menjalankan join yang sama setiap minggu. Simpan sekali sebagai model atau skrip Python.

Harga: paket gratis, tanpa kartu. Pro €49 per bulan, belum termasuk PPN.

Metode 3: Hitung dan ringkas dengan spatial join

Metode 1 memberi setiap sekolah distriknya. Pertanyaan sebaliknya, berapa sekolah di tiap distrik, memerlukan versi summary.

Cari Join attributes by location (summary) di Processing Toolbox. Taruh poligon di Join to features in, titik di By comparing to, lalu pilih statistik di Summaries to calculate: count, sum, mean, median, minimum, maximum, dan lainnya. QGIS menambahkan satu field per statistik, dengan nama seperti osm_id_count.

Peta sembilan arrondissement Lyon yang diwarnai dari kuning muda sampai oranye tua menurut jumlah sekolah, masing-masing berlabel: 9e 38, 4e 27, 1e 33, 6e 41, 5e 56, 2e 27, 3e 54, 7e 53, 8e 53. Titik merah menandai sekolah.
Sekolah per arrondissement dari satu summary join: 0,02 detik.

Tool ini juga bisa menjumlahkan angka. Pada bangunan IGN, satu kali jalan memberi setiap arrondissement jumlah bangunan dan jumlah hunian yang tercatat di dalamnya: 9.474 bangunan dan 51.743 hunian di arrondissement ke-3, yang terbesar untuk keduanya.

Untuk hitungan sederhana, Vector > Analysis Tools > Count Points in Polygon… melakukan hal yang sama dengan pengaturan lebih sedikit.

Pakai saat: jawabannya berupa angka per wilayah: jumlah, total, rata-rata.

Jangan pakai saat: Anda perlu daftar kecocokannya. Pakai Metode 1 dengan one-to-many.

Metode 4: Join attributes by nearest

Jika fitur tidak pernah bersentuhan, join berdasarkan jarak. Cari Join attributes by nearest di Processing Toolbox.

Atur Input layer ke schools, Input layer 2 ke tram_stops, dan Maximum nearest neighbors ke 1. QGIS menambahkan field halte, ditambah field distance dan koordinat kedua ujung.

Peta jalan Arrondissement ke-8 Lyon. Titik sekolah merah masing-masing dihubungkan garis hitam ke halte trem biru terdekat. Beberapa sekolah memakai halte yang sama.
Setiap sekolah dihubungkan ke halte trem terdekatnya. Di seluruh Lyon mediannya 710 m, dan 86 dari 382 sekolah berada dalam jarak 300 m.

Dua pengaturan mengubah hasilnya:

  • Maximum distance. Dengan 300 m, hanya 86 sekolah yang mendapat halte. Sisanya, 296 sekolah, tetap ada di hasil dengan field kosong, kecuali Anda mencentang Discard records which could not be joined.
  • Maximum nearest neighbors. Dengan 3, ke-382 sekolah menjadi 1.146 baris, satu per pasangan sekolah dan halte. Jarak yang persis sama juga menambah baris: pada 103.910 bangunan IGN kami mendapat 103.911 baris.

Jaraknya garis lurus, bukan jarak tempuh menyusuri jalan.

Pakai saat: Anda bertanya "mana yang paling dekat" dan "seberapa jauh".

Jangan pakai saat: Anda perlu jarak tempuh. Pakai tool Network analysis di Processing Toolbox.

Predikat mana yang dicentang

Predikat adalah aturan spasial yang menentukan kecocokan. QGIS membacanya sebagai "layer A [predikat] layer B", dengan A adalah layer yang menerima field.

Diagram delapan relasi spasial antara bentuk merah A dan bentuk biru B: intersect, keduanya berbagi bagian mana pun; contain, A memuat seluruh B; are within, A berada di dalam B; equal, geometri sama; touch, hanya berbagi tepi; overlap, tipe sama dengan sebagian bagian bersama; cross, sebuah garis melintas; dan no match, disjoint, tidak ada yang di-join.
Merah adalah layer yang menerima field, biru adalah layer pembanding.

Tiga aturan mencakup sebagian besar pekerjaan:

  • intersect untuk titik dalam poligon, dan untuk apa pun yang cukup bersentuhan. Ia juga menangkap fitur yang tepat di batas.
  • are within bila fitur harus berada sepenuhnya di dalam. Pada bangunan kami, 112 bangunan yang bersinggungan dengan Lyon tidak berada seluruhnya di satu arrondissement: 108 melintasi batas kota dan 4 melintasi batas dalam.
  • contain untuk arah sebaliknya, poligon yang memuat titik.

Anda bisa mencentang beberapa kotak. Fitur lalu dianggap cocok jika salah satunya benar.

One-to-one, one-to-many, atau largest overlap

Bangunan di perbatasan menyentuh dua distrik. Join type menentukan apa yang terjadi padanya. Pada 46.250 bangunan IGN yang bersinggungan dengan Lyon:

Join typeBaris hasilWaktu
One-to-many (satu fitur per kecocokan)46.2541,13 s
First matching feature only (one-to-one)46.2500,99 s
Largest overlap only (one-to-one)46.2509,62 s

One-to-many menggandakan 4 bangunan yang melintasi batas dalam. Itu benar untuk daftar kecocokan dan salah untuk penjumlahan apa pun: bangunan-bangunan itu akan terhitung dua kali.

"First matching" menyimpan kecocokan mana pun yang pertama ditemui QGIS, sehingga bangunan di perbatasan bisa masuk ke distrik yang mana saja. "Largest overlap" memilih distrik yang memuat sebagian besar bangunan, itu jawaban yang adil, tetapi di sini waktunya sepuluh kali lebih lama.

Jebakan CRS

CRS yang salah jarang menghentikan join. Ia diam-diam mengubah hasilnya.

  • CRS campuran berfungsi untuk join berdasarkan lokasi. Kami membiarkan sekolah dalam WGS 84 (EPSG:4326) dan distrik dalam Lambert-93. QGIS memproyeksikan ulang secara langsung dan ke-382 sekolah cocok.
  • Jarak mengikuti satuan layer input. Jalankan Join by nearest pada file WGS 84 dan median "distance" menjadi 0,0071. Itu derajat, bukan meter. Proyeksikan ulang kedua layer ke CRS proyeksi dengan satuan meter lebih dulu, lewat Vector > Data Management Tools > Reproject Layer….
  • Maximum distance memakai satuan yang sama. Angka 300 dalam derajat mencakup seluruh planet.

Panduan kami tentang apa itu CRS menjelaskan derajat versus meter dan cara memperbaiki layer yang salah tempat.

Kecepatan pada layer besar

QGIS menangani join skala kota dalam hitungan detik. Pada 103.910 bangunan IGN:

  • Join one-to-one ke 9 distrik: 0,97 s dari GeoPackage.
  • Layer yang sama sebagai Shapefile: 1,69 s. Setelah Vector > Data Management Tools > Create Spatial Index…, 1,04 s.
  • Halte trem terdekat untuk setiap bangunan: 3,5 s.
  • Largest overlap: 9,62 s, opsi paling lambat.

Empat kebiasaan menjaga join besar tetap cepat:

  • Bekerja dari GeoPackage. Ia membawa indeks spasial. Shapefile memerlukan file .qix, yang ditulis oleh Create Spatial Index.
  • Minta lebih sedikit field. Isi Fields to add daripada menyalin semuanya.
  • Hindari largest overlap kecuali fitur di perbatasan benar-benar penting.
  • Perbaiki geometri lebih dulu. Poligon yang tidak valid menghentikan proses dengan pesan "has invalid geometry". Tool Fix geometries di Processing Toolbox memperbaikinya. Anda juga bisa mengubah Invalid feature filtering di bawah ikon kunci pas di samping layer input.

Periksa juga di mana titik Anda berada. Hanya 211 dari 382 titik sekolah yang jatuh di dalam bangunan IGN. Sisanya menandai lapangan dan halaman, jadi "sekolah di dalam bangunan" akan melewatkan 171 sekolah.

Yang perlu diingat

Pakai Join Attributes by Location dengan intersect untuk memberi titik nama wilayahnya.

Pakai versi Summary untuk menghitung atau menjumlahkan per wilayah, dan Join Attributes by Nearest untuk fitur terdekat beserta jaraknya.

Pilih one-to-one untuk total, dan one-to-many bila Anda perlu setiap kecocokan.

Proyeksikan ulang ke CRS dengan satuan meter sebelum menghitung jarak apa pun.

Jika Anda tidak yakin tool mana yang cocok, jelaskan hasil yang Anda inginkan ke AI Agent dan periksa apa yang dibuatnya.

Pertanyaan yang sering diajukan

Apa itu spatial join di QGIS?

Spatial join menambahkan field satu layer ke layer lain berdasarkan lokasi: di dalam, bersentuhan, atau terdekat. Di QGIS, tool utamanya adalah Join Attributes by Location, versi Summary-nya untuk hitungan dan statistik, dan Join Attributes by Nearest untuk jarak.

Bagaimana cara join attributes by location di QGIS?

Buka Vector > Data Management Tools > Join Attributes by Location…. Atur layer yang menerima field di Join to features in dan layer sumber di By comparing to, centang intersect, pilih field dan jenis join one-to-one, lalu jalankan.

Apa bedanya join by location dan join by nearest?

Join by location mensyaratkan fitur bersentuhan atau tumpang tindih, sesuai predikat yang Anda centang. Join by nearest tidak memerlukan kontak: ia mencari fitur terdekat dan menambahkan field jarak, dalam satuan CRS layer input.

Mengapa spatial join saya menghasilkan field kosong?

Biasanya fitur tidak memenuhi predikat: titik tepat di luar poligon, predikat yang terlalu ketat seperti "are within", atau geometri yang tidak valid. Periksa kedua layer di peta, coba "intersect", dan jalankan Fix Geometries. CRS yang hilang pada salah satu layer juga membuatnya salah tempat.

Bisakah AI melakukan spatial join di QGIS?

Bisa. AI Agent menjalankan tool QGIS dari permintaan yang diketik. Pada pengujian Lyon kami, ia melakukan hitungan per distrik dan join terdekat dari satu kalimat dalam 22 detik, dengan hasil yang sama seperti pengerjaan manual.

Coba AI Agent gratis di QGIS, tanpa kartu

Ditulis olehTerraLab
·12 min read
Hubungi