Bagaimana cara membuat peta panas atau Choropleth yang menggunakan poligon di QGis?

12

Saya telah bermain-main dengan plugin heatmap untuk QGIS dan saya bertanya-tanya apakah mungkin membuat heatmap dengan menggunakan plugin / alat serupa yang menggunakan poligon serta poin?

Saya ingin mendapatkan representasi kepadatan data dengan cara yang sama seperti yang dilakukan oleh plugin heatmap dengan poin.

Gambar berikut adalah sketsa kasar dari hasil yang saya inginkan:

masukkan deskripsi gambar di sini

NWT Adam
sumber
3
Pernahkah Anda berpikir tentang membuat centroid untuk poligon Anda, dan membuat peta panas dari poligon?
andytilia
1
Beberapa detail lebih lanjut tentang data Anda akan membantu. Apa yang diwakili poligon, dan bagaimana poligon didistribusikan? Bisakah Anda memposting foto sampel?
andytilia
@andytilia: Centroid tidak secara akurat mewakili cakupan poligon. Poligon mewakili penggunaan sumber daya dalam area 1200m2. Beberapa poligon berukuran kecil mewakili petak berry yang baik dan yang lainnya besar menutupi habitat karibu dan moose. Saya telah mencari binning grid heksagonal dan kemudian menghitung tumpang tindih ... tapi saya cukup banyak noob jadi saya belum bisa menemukan tutorial yang baik yang bisa saya mengerti tentang hal itu.
NWT Adam
1
melihat QGIS Peta panas Plugin qgis.spatialthoughts.com/2012/07/...
rkm
Apakah nilai numerik membawa arti bagi Anda atau Anda hanya mencari visualisasi yang cantik / jelas?
underdark

Jawaban:

5

Mungkin Anda dapat menghasilkan satu set titik acak ke dalam poligon Anda, ada alat QGIS untuk itu ? Jika Anda memiliki poligon yang tumpang tindih, maka Anda memiliki kepadatan yang lebih tinggi di area ini. Kemudian gunakan peta panas untuk poin. Anda perlu menjalankan beberapa putaran untuk menemukan jumlah poin yang optimal, karena hasilnya tergantung pada itu.

Jika data Anda menunjukkan distribusi beberapa habitat, yang masih kabur, maka ini bisa paling dekat dengan situasi dunia nyata di mana satu titik mencerminkan sekitar satu spesimen.

JaakL
sumber
1
+1 Ide bagus. Satu-satunya hal yang akan saya tambahkan adalah Bergabung di Lokasi dengan data titik dan kutub heksagonal, singkirkan semua fitur yang tidak cocok dan kemudian hasilkan poin di dalamnya, sehingga poin tunggal Anda tidak akan tenggelam di antara semua poin lainnya.
RomaH
Ini sepertinya memberikan hasil terbaik. Terima kasih kepada semua orang yang menawarkan solusi. Saya merasa tidak enak memberikan hadiah hanya kepada satu orang karena sepertinya ada sejumlah solusi yang bagus!
NWT Adam
6

Jika saya memahami pertanyaan Anda dengan benar, saya telah melakukan hal serupa sebelumnya; hanya harus mengingat apa yang saya lakukan.

Ini akan berfungsi jika polis Anda tumpang tindih DAN bukan lapisan yang sama. Jika mereka berada di lapisan yang sama dan itu mungkin, pindahkan mereka ke lapisan terpisah, jika Anda tidak lapisan target hanya akan mewarisi salah satu nilai.

Proses utama untuk menggunakan adalah atribut Bergabung dengan lokasi di bawah menu Vektor> Manajemen Data . Di sini tentukan bidang heksagonal Anda sebagai lapisan target dan lapisan gabungan sebagai salah satu poligon Anda. Beri nama layer yang Anda hasilkan dan centang tombol radio untuk Keep All Records .

Lapisan yang dihasilkan harus merupakan salinan dari lapisan hexgonal Anda dengan semua sel yang berpotongan dengan lapisan poligon Anda. Sekarang untuk interation gunakan layer hasil terakhir Anda sebagai layer target dan bergabung dengan layer poligon berikutnya. Ambil lasyer yang dihasilkan dan bergabung dengan layer Anda berikutnya sampai Anda telah bergabung dengan semua layer Anda.

Lapisan terakhir Anda seharusnya mewarisi semua bidang atribut dari lapisan sebelumnya dan banyak yang mungkin mengatakan NULL.

Di sinilah kita harus bermain di beberapa nyali dari shapefile, jadi jika Anda tidak menyimpan layer sebagai shapefile lakukan sekarang. Dan hapus layer dari ruang kerja Anda di QGIS.

Buka file * .dbf dari shapefile di OpenOffice Calc, JANGAN gunakan Excel. Ini akan memotong-motong file dan tidak berguna, belajar dengan cara yang sulit. Dan jangan menyusun ulang data, itu sangat spesifik pada urutan baris dalam file juga. Periksa untuk memastikan bahwa NULLs sekarang nol jika tidak, gantikan dengan hati-hati.

Sekarang masukkan shapefile ke QGIS dan buka Tabel Atribut . Seharusnya sekarang menampilkan nol bukan NULL. Gunakan Kalkulator Bidang dan jumlah bidang yang diperuntukkan bagi pekerjaan Anda di kolom baru.

Sekarang Anda memiliki bidang yang dijumlahkan yang harus menunjukkan dengan tingkat akurasi nilai dari semua koleksi fitur yang tumpang tindih dengan bidang target. Anda dapat menggunakan fungsi Simbologi untuk mewarnai poligon Anda berdasarkan nilai bidang yang Anda simpulkan untuk peta choropleth yang bagus.

Jika Anda ingin menghapus semua bidang yang tidak digunakan dalam file. Cukup buka kembali file dbf di Calc dan hapus kolom yang tidak diinginkan sesuka hati. Secara pribadi, saya akan menyarankan belajar untuk merasa nyaman pergi ke shapefile dengan cara ini seperti yang sering saya lakukan.

RomaH
sumber
Sayangnya, saya memiliki ratusan poligon yang tumpang tindih dengan lapisan yang sama. Bisakah Anda melihat cara untuk mengatasi ini tanpa memisahkan ini menjadi beberapa ratus lapisan?
NWT Adam
1
Anda dapat membuat overlay poligon dengan PostGIS (jika Anda menggunakannya) yang memecah polanya yang tumpang tindih. gis.stackexchange.com/questions/83/... Prehaps seseorang dengan SQL-fu yang lebih baik dapat membantu kami di sini dan bagaimana cara mendapatkan polis yang dihasilkan untuk mewarisi nilai-nilai mereka, saya tidak terlalu pandai dalam hal itu.
RomaH
1
Pilihan lain, salah satu yang saya sarankan sangat kuat, adalah mungkin sekarang saatnya untuk memikirkan kembali pendekatan Anda yang tepat untuk masalah Anda. Data apa yang Anda coba petakan? Apakah ada alasan untuk menganggap bahwa nilainya akan homogen di seluruh poligon? Apakah poligon yang tumpang tindih sebenarnya memiliki efek akumulatif? Kecuali Anda memiliki bukti yang baik untuk menyarankan hal-hal ini, penggunaan peta ini untuk segala jenis pemodelan prediktif mungkin berada di tanah yang goyah. Hanya berpikir keras tentang, Anda mungkin memiliki solusi yang benar tetapi Anda mungkin menemukan cara yang lebih baik untuk memodelkan atau memetakannya.
RomaH
1
Terima kasih atas saran PostGIS. Saya akan memeriksanya, tetapi saya baru tahu cara menggunakan PostGIS. Mengenai menilai kembali pertanyaan ... Saya mengerti maksud Anda, tetapi saya tidak yakin bagaimana lagi saya bisa memvisualisasikan apa yang ingin kami ungkapkan. Data kami mewakili semua area yang dipetakan oleh orang tua dan pengguna sumber daya sebagai produktif atau penting dari perspektif budaya. Kami memahami bahwa peta nilai tidak homogen di seluruh poligon, tetapi cukup dekat untuk titik yang ingin kami ungkapkan dengan peta.
NWT Adam
1
Jempol ke manual apa pun dalam qgis - terutama setelah Anda mulai berurusan dengan // ton // dari shapefile, Anda bisa berakhir pada posisi yang benar-benar membuat frustrasi. Anda tidak akan menyesal menggunakan SQL-fu Anda, baik itu dengan plugin postGIS atau plugin GRASS (lihat jawaban saya di bawah ini: gis.stackexchange.com/a/42188/7689 ).
egbutter
4

Ini adalah alur kerja umum menggunakan raster. Saya tidak tahu spesifik untuk mencapainya di QGIS.

  1. Gunakan alat persimpangan untuk membuat layer vektor baru bidang tumpang tindih poligon
  2. Ubah layer vektor Anda, termasuk layer yang tumpang tindih, menjadi raster
  3. Gunakan aritmatika raster (mungkin tambahan) untuk menggabungkan raster
  4. Hasilnya harus berupa raster yang terlihat seperti peta panas

Nilai alfa / null dan / atau transparansi layer akan memungkinkan Anda untuk overlay raster pada basemap apa pun.


sumber
Setelah melalui alur kerja ini saya dibiarkan dengan blok abu-abu besar yang mencakup luasnya raster baru. Bagaimana saya membuat ini terlihat seperti peta panas?
NWT Adam
1
Apakah ada nilai yang berbeda yang ditetapkan untuk piksel dalam raster terakhir? Beberapa pemikiran: Anda mungkin harus menentukan resolusi yang lebih baik (lebih banyak piksel) saat membuat raster; raster harus memiliki ukuran dan resolusi yang sama; Anda mungkin perlu meregangkan atau memodifikasi colormap raster yang dihasilkan untuk menunjukkan warna yang lebih cerah untuk nilai yang lebih besar.
Oke saya sudah menyiapkan peta warna tapi saya hanya mendapatkan dua warna biru (nilai 0) dan nilai merah (2) nilai merah mencakup area layer asli vektor saya dan layer tumpang tindih saya. Saya menduga bahwa masing-masing lapisan diberi nilai 1 daripada setiap poligon ketika mereka dirasterisasi. Kemudian ketika raster ditambahkan, nilai totalnya sama dengan 2. Bagaimana cara mendapatkan nilai-nilai yang akan dipertahankan / ditambahkan pada level poligon daripada level layer?
NWT Adam
raster resolusi yang lebih baik akan membantu
Bagaimana cara membuat raster resolusi yang lebih halus?
NWT Adam
4

Coba ini sebagai gantinya, jika itu sesuai dengan kebutuhan Anda, itu bukan solusi komputasi untuk dataset tetapi jika Anda hanya mencari solusi infografis, Anda bisa mencoba ini.

Gabung atribut berdasarkan lokasi, dengan sel heaxgonal Anda sebagai target dan data titik Anda sebagai gabungan. Pilih untuk menyimpan semua fitur. Atur simbologi ke sel dengan nilai yang diwariskan ke warna yang diinginkan dan atur transparansi ke sesuatu seperti 50%.

Kemudian pada layer Anda dengan polys lingkaran atur simbologinya dengan warna dan transparansi yang sama. Tempatkan lingkaran poli di depan poli sel. Ini akan memberikan ilusi peningkatan saturasi ketika nilainya meningkat.

Jika Anda mau, Anda juga bisa mengekstrak garis-garis semua polys dan overlay di atasnya sehingga outline sublayer tampaknya tidak diwarnai oleh layer lainnya.

Anda harus bermain dengan warna dan transparansi untuk menemukan solusi terbaik. Saya menemukan warna yang sama terlihat terbaik tetapi pengalaman.

RomaH
sumber
4

Saya sarankan Anda menggunakan plugin GRASS - QGIS memiliki fungsi yang sangat terbatas (dan mengapa menemukan kembali roda dengan python ketika perangkat lunak seperti GRASS sudah ada?):

v.in.ogr.qgis

[dua baris berikutnya mungkin diperlukan, tergantung pada apakah poligon Anda sudah memiliki nilai]

v.db.addcol 
v.db.update_const 

ini adalah tempat kita menjumlahkan tumpang tindih dalam poligon kemudian membuat raster berdasarkan kolom tersebut

v.to.db ... qcolumns=sum(col_with_polygon_value)
v.to.rast.attr

v.out.ogr [r.out.ogr]
egbutter
sumber
3

Dengan QGIS biasa itu bisa rumit, Anda mungkin perlu skrip kustom, atau menggunakan basis data spasial seperti PostGIS atau Spatialite. Saya akan membuat kisi poin reguler dengan PostGIS atau menghasilkan sebagai file teks CSV dan mengimpor ini. Kemudian gambar lingkaran di sekitar setiap titik dengan st_buffer, atau persegi panjang dengan ST_MakeEnvelope, dan hitung semua area yang tumpang tindih dari setiap buffer. Maka Anda mungkin ingin menghapus semua nilai 0, jika itu berarti "tidak ada data". Akhirnya Anda bisa melakukan peta panas untuk grid, menggunakan penghitung sebagai bidang Berat.

Anda perlu bereksperimen dengan resolusi grid yang berbeda untuk menemukan yang optimal. Intinya sangat mirip dengan pendekatan raster yang disarankan oleh Kevin, hanya tinggal di dunia vektor.

JaakL
sumber