Saya punya dua lapisan. Lapisan bentuk poligon dengan banyak ubin dan lapisan raster yang mengandung tutupan lahan CORINE 2006 dengan banyak kategori dalam peta warna. Saya ingin mendapatkan untuk setiap poligon di shapelayer sejumlah setiap kategori tutupan lahan dari layer raster.
Misalnya ada poligon dengan id '2' dan saya ingin atribut seperti ini untuk poligon ini (dalam persen atau meter persegi):
- Tanah yang subur: 15%
- Hutan: 11%
- Streets: 2% (... dan satu)
Saya mencoba melakukannya di rumput, qgis (tidak ada fungsi), saga (hanya menjumlahkan setiap nilai total) r (jumlah total), tetapi saya masih belum menemukan solusi. Sebagian besar plugin (statistik zona dalam qgis) hanya mendukung 0-1 lapisan raster. v.rast.stats juga tidak membantu. Saya terbuka untuk solusi apa pun yang baik dan cerdas !. Mungkin saya bahkan menggunakan pendekatan yang salah atau membuat kesalahan.
Di Arcgis tugas ini cukup mudah, jika saya ingat benar, tetapi saya masih kehilangan solusi yang baik untuk pengguna linux sehari-hari Anda.
Saya menjalankan sistem linux debian dan ini sebabnya saya hanya dapat menggunakan program untuk OS ini.
EDIT: Karena pertanyaan ini masih memiliki begitu banyak pandangan dan pengunjung: Saya menulis QGIS-plugin, yang juga mampu menghitung landcover layer raster. Saya belum mengkodekan hamparan poligon, tetapi pasti direncanakan. Temukan plugin di sini dan instal perpustakaan Scipy terlebih dahulu.
Jawaban:
Gunakan 'ekstrak' untuk overlay fitur poligon dari SpatialPolygonsDataFrame (yang dapat dibaca dari shapefile menggunakan maptools: readShapeSpatial) pada raster, kemudian gunakan 'tabel' untuk meringkas. Contoh:
Jadi poligon pertama saya mencakup 542 piksel, dan yang kedua saya mencakup 958. Saya dapat meringkas masing-masing:
Jadi poligon pertama saya adalah 287 piksel kelas 26, dan 255 piksel kelas 27. Cukup mudah untuk menjumlahkan dan membagi dan mengalikannya dengan 100 untuk mendapatkan persentase.
sumber
Saya ingin melaporkan kembali dan inilah saya. Solusi Spacedman bekerja sangat baik dan saya dapat mengekspor semua informasi untuk setiap poligon dalam bentuk saya. Untuk berjaga-jaga jika seseorang memiliki masalah yang sama, berikut adalah cara saya mendahului:
sumber
jika saya mengerti dengan benar apa yang Anda inginkan, dan dengan asumsi Anda sudah memiliki layer vektor 'mypolygonlayer' dan layer raster 'corina' di dalam database GRASS GIS Anda:
Pertama saya akan mengkonversi vektor ke raster. Kucing akan memastikan Anda memiliki satu pengidentifikasi unik per poligon. Jika Anda memiliki kolom dengan pengidentifikasi numerik unik, Anda bisa menggunakan kolom itu. Kolom label opsional:
input v.to.rast = lapisan mypolygonlayer = 1 output = mypolygons use = cat labelcolumn = NameMappingUnit
Kemudian jalankan r.stats untuk mendapatkan statistik Anda:
r.stats -a -l input = mypolygons, corina separator =; output = / home / paulo / corinastats.csv
Langkah terakhir adalah membuka corinastats.csv di misalnya, LibreOffice dan buat tabel pivot atau gunakan R untuk membuat tabel silang Anda
sumber
Saya tahu posting ini cukup lama tetapi saya baru-baru ini ingin melakukan analisis yang sama tetapi mengunduh program seperti R sedikit merepotkan pada komputer kerja saya dan perlu persetujuan. Setelah berjam-jam meneliti metode yang bisa saya gunakan hanya dengan QGis dan Excel, saya menemukan metode ini bekerja paling baik untuk saya dan ingin menawarkannya kepada orang-orang dalam situasi yang sama.
Klip polygon ke layer raster (Raster → ekstraksi → clipper: file input = layer raster, pilih nama output & lokasi Anda, klik pada layer mask, pilih poligon → ok)
Polygonise layer clipper (Raster → Conversion → polygonise: file input = layer klip Anda, simpan output → ok)
Menghitung jumlah piksel (Klik pada file bentuk yang baru saja Anda buat → kalkulator bidang terbuka: centang “buat bidang baru” dan tambahkan nama bidang, Fungsi = geometri → area → ok). Anda sekarang harus memiliki kolom baru di tabel atribut Anda yang menunjukkan jumlah piksel.
Simpan lapisan poligonise (Klik kanan lapisan poligonise, simpan sebagai: format = file DBF, simpan sebagai → ok)
Meringkas jumlah piksel untuk masing-masing habitat (mulai unggul, buka file, jika judul tidak ditambahkan sekarang untuk setiap kolom, klik pada sel kosong, buka tab DATA, konsolidasi, pastikan itu dalam jumlah, klik pada panah merah di sebelah "browse ..." dan pilih Anda dua kolom (termasuk judul), klik "tambah" dan centang kotak "Baris atas" dan "kolom kiri" → ok)
Jika, seperti saya, Anda memiliki banyak poligon untuk dianalisis dan perlu membandingkannya dalam tabel yang sama, langkah ini akan sangat membantu. Dalam buku kerja excel baru, daftar nomor habitat Anda di kolom A (untuk saya 1 hingga 48) dan tempatkan dua kolom yang baru saja Anda konsolidasi di kolom B dan C (habitat di B dan jumlah piksel di C). Di sel D1 tulis rumus berikut: = IFNA (INDEX (C: C; MATCH (A2; B: B; 0)); "") dan seret (atau klik dua kali sudut kanan bawah) ke nilai terakhir Anda (jadi jika Anda memiliki 48 habitat ke sel D48). Jumlah piksel sekarang dalam sel yang sesuai dengan habitat Anda dan Anda dapat mengulangi proses ini untuk semua poligon Anda.
sumber
Bagaimana mengkonversi data CORINE menjadi dataset vektor poligon menggunakan QGIS ( Raster> Conversion> Polygonize ) dan kemudian menggunakan fungsi Union ( Vector> Geoprocessing Tools> Union ) untuk bergabung dengan poligon. Dataset vektor yang dihasilkan akan berisi area dari setiap kelas CORINE di setiap poligon.
sumber
QGIS.
Di bagasi QGIS, ada versi lain dari ZonalStats yang tersedia, itu disebut Statistik Zonal.
Ini melakukan fungsi yang Anda butuhkan.
Mengenai alur kerja, saya tidak jelas berapa banyak raster yang Anda miliki atau apakah mereka hanya pita dalam raster?
sumber
Menentang sebagian besar jawaban di atas, saya berpendapat bahwa opsi yang lebih baik adalah meraster poligon Anda dan daripada bekerja dengan dua set data raster daripada dua set data poligon. Ini jauh lebih sedikit pemrosesan intensif dan akibatnya satu-satunya solusi yang mudah diterapkan untuk memproses raster besar dan file poligon besar di R.
Setelah meraster poligon Anda ke tingkat dan resolusi data raster yang sama persis, Anda dapat membuat tabulasi statistik ringkasan seperti yang dijelaskan di sini , yang sesuai jika raster Anda sesuai dengan memori (layer raster kecil / menengah) atau Anda dapat membuat binariasi setiap kategori dengan
reclass
fungsi tersebut. dan daripada menghitungzonal
statistik untuk setiap kelas. Berikut adalah solusi yang menggabungkan statistik rasterisasi dan zona menjadi satu fungsi dan berfungsi baik dengan kumpulan data yang sangat besar.sumber