Hal semacam ini paling baik dilakukan dengan Spatialite dan SQL.
Pertama, Anda perlu memuat data Anda ke dalam basis data Spatialite yang dapat dilakukan menggunakan plugin DBManager yang dikirimkan bersama QGIS. Klik tombol Impor Layer/File button
.
Dengan data Anda ke dalam basis data, Anda kemudian dapat menjalankan kueri berikut menggunakan SQL
tombol. Anda hanya perlu mengubah nama kolom dan tabel agar sesuai dengan data Anda.
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
Beri tahu alat kueri kolom id unik Anda (id) dan kolom geometri (geomm), lalu klik muat
Anda harus memiliki sesuatu seperti ini, setelah Anda memberi label tentunya
Rincian Permintaan
Kami bergabung dengan layer itu sendiri menggunakan:
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id
AND intersects(a2.geomm, a1.geomm)
tetapi hanya jika geometri berpotongan dan id tidak sama, jika tidak kita berakhir dengan rekaman yang sama dua kali untuk setiap poligon. Kami juga menggunakan LEFT OUTER JOIN
sehingga kami menyertakan catatan yang tidak bergabung yaitu tidak punya tetangga.
Di bagian pilih:
SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours,
a1.pop,
a1.name,
a1.id,
a1.geomm
kami menggunakan COALESCE
untuk mengubah NULLS
(tidak ada tetangga) menjadi 0
kalau tidak mereka hanya tinggal NULL
.
Lalu kami hanya GROUP BY a1.id
agar kami mendapatkan satu catatan untuk setiap poligon.
Cara lain untuk melakukan ini adalah dalam GRASS (menggunakan kotak alat GRASS atau langsung dalam GRASS). Pada contoh di bawah ini, layer EA adalah layer vektor dengan negara dan dalam tabel atribut, kolom dengan populasi per negara. Lihat posting ini untuk penjelasan lebih rinci.
Langkah 1) Buat layer baru dengan tabel atribut yang ditautkan ke batas, dengan dua kolom dengan ID poligon yang berbatasan dengan garis batas masing-masing di sebelah kiri dan kanan
Langkah 2) Jalankan SQL untuk membuat tabel yang menautkan ID negara dengan jumlah populasi semua negara tetangga:
Langkah 3) Gabungkan tmp tabel baru dengan tabel atribut asli.
Tabel atribut dari layer vektor Anda sekarang harus memiliki kolom tambahan dengan jumlah populasi semua negara tetangga.
sumber
Jawaban yang bagus dari @Nathan . Saya mencoba melakukan ini menggunakan pyqgis dan rupawan. Lihat posting ini untuk mengunduh skirpt dan jalankan di QGIS. Keuntungan dari metode ini adalah Anda mendapatkan hasilnya sebagai bagian dari tabel atribut.
sumber