Gaya raster secara otomatis menggunakan nilai unik di QGIS?

17

Di ArcMap, dimungkinkan untuk secara otomatis menghitung nilai unik untuk raster dan kemudian menerapkan gaya yang berbeda untuk setiap nilai unik (lihat gambar 1).

Namun, di QGIS, saya harus secara manual menambahkan nilai untuk penataan ketika menggunakan gaya "Singleband pseudocolor" (lihat gambar ke-2). Apakah ada cara mengisi-otomatis nilai unik seperti yang dilakukan ArcMap?

ArcMap:

Nilai unik simbologi ArcMap raster

QGIS (bagaimana cara mengisi secara otomatis daftar nilai dengan nilai unik?):

QGIS raster stlying

Peet Whittaker
sumber
Anda memiliki klasifikasi di sisi kanan. Tidak yakin mengapa Anda memotong ini di Tangkapan Layar Anda karena ini adalah opsi yang Anda butuhkan ... Cukup setel jumlah kelas ke selisih maksimum Anda minimum +1. Gunakan mode interval yang sama. Masalahnya mungkin ketika data Anda tidak terpenuhi, maka Anda perlu menghapus nilai yang tidak digunakan.
Matte
@Matte Memang, namun kami biasanya memiliki data yang tidak bersebelahan dengan kesenjangan besar. Jadi tidak praktis untuk menghapus nilai-nilai yang sebenarnya tidak ada di dalam raster (misalnya, satu-satunya nilai adalah 1 dan 1000000 Anda harus secara manual menghapus BANYAK angka). Plus, ini mengasumsikan pengetahuan a priori tentang nilai-nilai unik dalam raster ...
Peet Whittaker

Jawaban:

3

Bagi yang masih mencari ini. Nilai raster yang unik telah ditambahkan ke QGIS 3. "Ditambahkan oleh Nyall Dawson sekitar 1 tahun yang lalu

[FITUR] Izinkan mengklasifikasikan renderer palet menggunakan nilai unik dari layer raster

Menambahkan cara mudah untuk gaya raster diskrit seperti kelas penggunaan lahan menggunakan renderer Paletted. Cukup pilih penyaji Paletted, pilih band, lalu tekan tombol "Tambahkan Nilai Unik". Nilai piksel unik akan diambil dari lapisan dan warna ditetapkan untuk masing-masing menggunakan jalur warna yang dipilih saat ini. "

Baswein
sumber
7

Inilah pendekatan yang mungkin bisa membantu. Alat GRASS r.reportmampu menghitung statistik dasar untuk setiap nilai unik dalam lapisan raster:

masukkan deskripsi gambar di sini

Outputnya dapat ditulis juga file txt biasa yang terlihat seperti ini (kiri: nilai unik, kanan: area yang dicakup oleh setiap nilai):

+-----------------------------------------------------------------------------+
|                      Category Information                        |    square|
|   #|description                                                  |     miles|
|-----------------------------------------------------------------------------|
|1111| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  1.249845|
|1113| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  0.062666|
[...]
|3412| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  0.013926|
|4111| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  4.713902|
|4211| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  0.083555|
|4212| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  0.135777|
|-----------------------------------------------------------------------------|
|TOTAL                                                             | 17.048727|
+-----------------------------------------------------------------------------+

Script geoprocessing berikut mengambil file teks ini sebagai input dan membuat renderer yang sesuai (dengan warna acak untuk kenyamanan) untuk layer raster (Terinspirasi oleh LAWHEAD, J .: QGIS Python Programming Cookbook, p. 135):

##giswg=group
##thexml=file
##theraster=raster
from random import randint
from PyQt4.QtGui import QColor
from qgis.core import *
myraster = processing.getObject(theraster)
infile = open(thexml, 'r')
univalues = [l.split('|')[1] for l in [f for f in infile.readlines()][4:-4]]
s = QgsRasterShader()
c = QgsColorRampShader()
c.setColorRampType(QgsColorRampShader.EXACT)
i = []
for u in univalues:
    i.append(QgsColorRampShader.ColorRampItem(float(u), QColor('#%06x' % randint(0, 2**24)), u))
c.setColorRampItemList(i)
s.setRasterShaderFunction(c)
ps = QgsSingleBandPseudoColorRenderer(myraster.dataProvider(), 1, s)
myraster.setRenderer(ps)

Berkat kemampuan pemrosesan legendaris QGIS, Anda dapat menggabungkan keduanya dalam pemodel grafis dan menambahkan parameter raster agar cukup memilih layer raster yang dimuat:

masukkan deskripsi gambar di sini

Setelah menyimpan model, dengan mengklik dua kali dalam kotak alat pemrosesan, dapat digunakan seperti alat biasa:

masukkan deskripsi gambar di sini

Dengan hasil yang terlihat seperti ini (singkapan dari set data natura2000 raster):

masukkan deskripsi gambar di sini

Atau di properti layer:

masukkan deskripsi gambar di sini

Saya pikir ini perlu beberapa perbaikan dalam pengalaman pengguna, tetapi ini adalah langkah pertama.

Jochen Schwarze
sumber
1
bukan pengalaman pengguna terbaik, tetapi terima kasih telah berbagi
RutgerH
Dengan hanya melihat alat yang dibuat sebagai UI, saya rasa tidak ada yang salah dengan pengalaman pengguna. Dan siapa yang tahu, apa yang terjadi di balik layar dalam alat Geoprocessing ESRI ...
Jochen Schwarze