Apa cara terbaik untuk menghasilkan peta kerapatan dari titik tertimbang di QGIS?

18

Saya benar-benar ingin mengulang fungsi alat ArcGIS Kernel Density - bagaimana saya bisa melakukan itu?

Saya ingin membatasi jawaban untuk perangkat lunak sumber terbuka dan bebas yang mudah dipasang - yaitu QGIS menginstal dengan mudah dengan GRASS di semua platform sehingga QGIS + GRASS akan baik-baik saja, tetapi SAGA tidak (sayangnya, karena memiliki apa yang mungkin menjadi alat yang ideal).

Saya mencoba membuat peta kepadatan satwa liar di seluruh kawasan lindung di QGIS. Peta kepadatan dalam contoh berikut ini diproduksi di ArcGIS dari pengamatan titik satwa liar, dengan jumlah mentah ukuran kelompok (bidang dalam file vektor) yang digunakan untuk menimbang kepadatan setiap sel kisi dalam alat Kernel Density (SpatialAnalyst), dengan radius penelusuran dan ukuran sel kisi yang dipilih:

Kepadatan margasatwa di Taman Nasional Kafue dengan sel grid 5x5 km dan kepadatan kernel radius 7,5 km

Dalam pertanyaan sebelumnya tentang kepadatan , disarankan untuk menggunakan alat GRASS v.kernel untuk meniru alat ArcGIS Kernel Density, tetapi v.kernel tidak melakukan pekerjaan yang sama . Setelah melihat manual dan (berhasil) menghasilkan peta kerapatan, tampaknya fungsi v.kernel hanya bekerja dengan kerapatan titik , dan tidak ada kesempatan untuk memberikan variabel untuk setiap titik (seperti jumlah mentah) untuk bobot setiap titik .

MEMPERBARUI

Tampaknya ada berbagai *.surf.*alat dalam GRASS yang dapat membantu menciptakan permukaan kerapatan - dan ini memang menerima kolom bobot atau nilai z, atau dilakukan pada raster. @underdark menyarankan v.surf.rst - dan 'zcolumn' akan menjadi variabel pembobotan (hitung) saya - tetapi saya tidak tahu bagaimana cara meminta alat untuk membuat ukuran kotak tertentu atau menggunakan jari-jari tertentu.

Saran tentang cara menggunakan v.surf.rst atau metode lainnya?


Contoh data

x,y,count
431250,8707500,0
418750,8707500,5
413750,8707500,3
411250,8707500,1
408750,8685000,0
411250,8685000,0
416250,8685000,0
416250,8682500,6
411250,8682500,3
418750,8680000,0
433750,8677500,3
421250,8677500,0
423750,8675000,1
431250,8672500,0
428750,8672500,2
426250,8672500,2
423750,8670000,0
Simbamangu
sumber
Bisakah Anda menjelaskan lebih lanjut data input Anda? Mungkin v.surf.rst akan lebih sesuai daripada v.kernel grass.osgeo.org/gdp/html_grass64/v.surf.rst.html . Apakah Anda memiliki satu nilai hitungan per sel grid yang ditunjukkan di atas?
underdark
@underdark - Menambahkan beberapa data sampel. Ini data titik dengan jumlah (jumlah gajah terlihat) dan bisa ada lebih dari satu pengamatan per sel kotak. Biasanya dalam 'hitungan' ArcGIS akan menjadi bidang 'populasi' dari alat kepadatan kernel.
Simbamangu
Semakin saya memikirkannya, semakin sedikit saya percaya bahwa v.kernel adalah pilihan yang baik untuk use case Anda. Sudahkah Anda memeriksa lektur? Mungkin pertama kali mengajukan pertanyaan tentang metode mana yang sesuai dalam kasus ini.
underdark
pertanyaan utama saya adalah bagaimana cara mengulang fungsionalitas kepadatan kernel dari Arcview, yang merupakan metode yang dikenal. Anda benar, v.kernel hampir pasti bukan alat yang tepat untuk melakukan itu!
Simbamangu
@underdark, terima kasih - Saya telah sedikit memperluas pertanyaan yang mungkin membantu; v.surf.rst memang terlihat tepat tetapi dapat menggunakan beberapa panduan tentang penggunaannya.
Simbamangu

Jawaban:

8

Menurut halaman manualnya, perintah GRASS r.resamp.filter akan melakukan untuk raster yang merepresentasikan data titik dengan tepat apa yang akan dilakukan ArcGIS untuk layer titik : gunakan filter=boxopsi untuk raster "sederhana" dan gunakan filter=gaussopsi untuk kernel ArcGIS lainnya. Gunakan -nbendera untuk menghindari penyebaran nol.


Perhatikan bahwa perkiraan kepadatan kernel (alias "peta panas") bukanlah interpolasi data. Nilai KDE di lokasi x memperkirakan jumlah nilai " Z " per unit area dekat x . (Jari-jari atau "bandwidth" mengkuantifikasi arti "dekat".) Nilai-nilai Z tidak perlu didefinisikan di setiap lokasi yang mungkin pada peta. Sebagai contoh, Z mungkin mewakili keberadaan sesuatu seperti seseorang, dalam hal ini KDE memberikan kepadatan populasi . Nilai-nilai Z juga tidak perlu bervariasi terus menerus di seluruh peta. Untuk interpolasi, diasumsikan bahwa Zdidefinisikan di semua lokasi dan bahwa data adalah pengamatan dari nilai-nilai Z pada titik-titik yang ditentukan. Interpolator mencoba untuk memprediksi nilai Z yang tidak teramati di semua titik lainnya. Ini masuk akal ketika Z adalah, katakanlah, suhu atau tekanan, tetapi biasanya tidak masuk akal ketika Z mencatat keberadaan sesuatu atau ketika data merupakan sensus lengkap. (Dalam kasus yang terakhir, renungkan apa arti peta kerapatan jalan untuk suatu wilayah dan bagaimana seseorang dapat memahami jalan "interpolasi" melintasi wilayah non-jalan.)

whuber
sumber
Saya sepertinya tidak memiliki r.resamp.filter di kotak alat GRASS saya (pada OS X, GRASS 6.4). Namun - sampai Anda menyebutkannya, saya tidak menyadari bahwa 'peta panas' adalah hal yang sama dengan KD; Saya berasumsi mereka menginterpolasi seluruh permukaan. Apakah alat Raster | Heatmap di QGIS melakukan KD? Apa 'rasio peluruhan'?
Simbamangu
Saya percaya istilah "peta panas" telah terkooptasi dalam GIS dari makna aslinya menjadi makna yang merujuk secara umum dan samar-samar ke hampir semua peta mirip-raster. Saya ragu bahwa GIS menawarkan fungsionalitas yang sesuai dengan makna aslinya.
whuber
Setelah diselidiki, alat peta panas di QGIS melakukan sesuatu yang mirip dengan KD di Arc, jika Anda menetapkan rasio peluruhan ke 0 (mengurangi kerapatan menjadi 0 di tepi jari-jari). Tampaknya ada beberapa perbedaan: nilai sel yang dihitung 25 x lebih tinggi (jari-jari 5 km / sel 2,5 km), seperti cara fungsi diterapkan pada sel - Arc tampaknya menggunakan jari-jari di sekitar titik aktual, sedangkan QGIS memilih sel yang tumpang tindih dan meruncing keluar dari titik itu.
Simbamangu
2
"Heatmap" dalam penggunaan umum tampaknya berarti banyak hal - melihat sekeliling, saya melihatnya diterapkan pada permukaan yang diinterpolasi, kepadatan kernel, dan pewarnaan sederhana dari piksel yang tidak dihaluskan juga. Makalah yang menarik tentang penggunaan asli / sejarah - dan sepertinya kita mungkin harus menggunakan istilah yang lebih tepat dalam memberi label alat QGIS.
Simbamangu
3
R.resamp.filter @Simbamangu adalah baru dalam GRASS 7 , tapi ada snapshot bulanan untuk OS X . Juga, alat peta panas tampaknya tidak menyajikan pilihan untuk algoritma untuk distribusi kepadatan, jadi tidak persis sama dengan Kernel Density atau r.resamp.filter, saya pikir.
Torsti
3

Modul SAGA 'Estimasi Densitas Kernel' adalah apa yang Anda cari.

Instal antarmuka SAGA Module di QGIS (di menu: Plugins -> Fetch Python plugins ..) dan gunakan modul. Semoga berhasil!

Vladimir
sumber
Saya akan SENANG menggunakan SAGA, tetapi saya bekerja di OSX 10.7 dan belum berhasil membangunnya (tidak ada binari untuk OSX); Saya menggunakan jam baru-baru ini mencoba lebih dari satu metode kompilasi tetapi build selalu gagal.
Simbamangu
Maka Anda harus bertanya tentang kompilasi SAGA di OSX 10.7. Seperti yang saya lihat SAGA satu-satunya alternatif yang masuk akal untuk alat ArcGIS KD.
Vladimir
3

Metode yang sangat sederhana dengan GRASS GIS yang lebih dekat dengan Point Density di ArcMap daripada Kernel Density:

  1. Impor poin ke peta raster dengan r.in.xyzmenggunakan metode = jumlah pada resolusi raster yang ditentukan (diatur dengan g.region).

  2. Gunakan r.neighborsuntuk memuluskan peta dengan metode = rata-rata (yang merupakan standar) dan gunakan ukuran opsi untuk mengatur radius pencarian.

(Saya tidak memiliki akses ke GRASS saat ini sehingga saya tidak benar-benar mencoba ini!)

Torsti
sumber
v.in.xyzdan v.neighborsmungkin juga berfungsi. Manual tidak menentukan bagaimana Anda mengatur atribut mana yang digunakan v.neighbors.
Torsti
2

Ketika Anda meminta panduan lebih lanjut tentang v.surf.rst, berikut ini adalah masukan saya

Pertama, tentang ukuran kisi - Anda dapat menggunakan Plugin -> GRASS -> Edit wilayah GRASS Saat Ini dan atur resolusi output. Output Anda dari v.surf.rst akan memiliki resolusi itu.

Untuk jari-jari, 'ketegangan' tampaknya menjadi parameter. Saya bukan ahli dalam algoritma ini tetapi membaca dari manual, ini tampaknya menjadi bagian yang relevan

"... Ketegangan tinggi" meningkatkan jarak antara titik "dan mengurangi rentang dampak dari setiap titik, ketegangan rendah" mengurangi jarak "dan titik-titik tersebut saling mempengaruhi satu sama lain dalam rentang yang lebih panjang) .."

Jadi Anda bisa menggunakan parameter tegangan secara kasar seperti Anda menggunakan parameter radius.

Dari data sampel Anda, hasil v.surf.rst terlihat seperti di bawah ini dan tampaknya masuk akal mengingat menggunakan hitungan sebagai bobot untuk interpolasi

masukkan deskripsi gambar di sini

spatialthoughts
sumber
1
Terima kasih untuk ini - lebih mudah dimengerti daripada halaman bantuan. Sebagaimana dicatat di atas oleh @whuber, interpolasi bukanlah metode yang tepat untuk data sampel titik semacam ini.
Simbamangu
2

Meskipun saya belum mengujinya, dalam repositori Kontributor Kontributor QGIS ada sebuah plugin yang disebut 'Estimasi rentang rumah dengan R'. Ini termasuk perhitungan Kernel (kepadatan?). Saya rasa, jika berhasil, ini akan menjadi metode terbaik. R akan melakukan metode statistik nyata untuk menghitung kerapatan kernel.

Jika Anda telah menginstal R Anda harus dapat menginstal plugin dan mencobanya.

Alex Leith
sumber
1

Jika Anda menerima untuk melakukan sedikit pemrograman java di luar qgis, Anda bisa menggunakan pustaka pembuat peta kerapatan ini .

Menggunakan konstruktor HeatMapBuilder(int w, int h, int[][] pts, int[] weights), dimungkinkan untuk memberikan bobot untuk setiap titik yang Anda butuhkan. Gambar output dapat diambil dengan getImage()metode ini dan disimpan di disk Anda dengan a ImageIO.write("mymap.png").

Ini adalah contoh dari output:

peta panas dengan perpustakaan java opencarto

Dimungkinkan untuk mengubah kekuatan penghalusan dan palet warna.

Julien
sumber