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:
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
Jawaban:
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=box
opsi untuk raster "sederhana" dan gunakanfilter=gauss
opsi untuk kernel ArcGIS lainnya. Gunakan-n
bendera 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.)
sumber
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!
sumber
Metode yang sangat sederhana dengan GRASS GIS yang lebih dekat dengan Point Density di ArcMap daripada Kernel Density:
Impor poin ke peta raster dengan
r.in.xyz
menggunakan metode = jumlah pada resolusi raster yang ditentukan (diatur dengang.region
).Gunakan
r.neighbors
untuk 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!)
sumber
v.in.xyz
danv.neighbors
mungkin juga berfungsi. Manual tidak menentukan bagaimana Anda mengatur atribut mana yang digunakanv.neighbors
.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
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
sumber
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.
sumber
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 dengangetImage()
metode ini dan disimpan di disk Anda dengan aImageIO.write("mymap.png")
.Ini adalah contoh dari output:
Dimungkinkan untuk mengubah kekuatan penghalusan dan palet warna.
sumber