Jawaban:
Dua cara mudah yang mungkin:
1.)
"Corine@1" = 23
. Ini akan mengekstrak semua sel dengan nilai 23 ke dalam raster baru2.) Jika Anda ingin ikhtisar yang lebih canggih atas jumlah sel raster Anda bisa menggunakan plugin LecoS untuk QGIS.
EDIT 3 : Saya mengubah kode di bawah ini menjadi skrip SEXTANTE yang cukup dapat digunakan yang memberikan output sebagai berikut:
Instruksi terperinci dan tautan unduhan dapat ditemukan di sini .
Anda dapat menggunakan konsol python untuk tugas ini. Salin kode yang disediakan di bawah ini, rekatkan ke file teks dan simpan sebagai "some_script.py" misalnya. Lain kali Anda harus menghitung nilai sel konsol python terbuka di QGIS, tekan tombol 'tunjukkan editor' dan buka skrip ini di sana. Kemudian ganti 'raster_path' di baris keempat dalam skrip dengan path aktual ke raster Anda dan simpan perubahan. Kemudian jalankan script dan di output konsol (di sebelah kiri dari editor pada screenshot di bawah) Anda akan melihat jumlah sel untuk setiap nilai yang Anda miliki di raster.
Perhatikan bahwa Anda harus memasang python-numpy agar skrip ini berfungsi.
EDIT: Juga, jika Anda tidak membutuhkan nilai yang tepat tetapi Anda lebih suka ingin melihat distribusi nilai, Anda dapat menggunakan pendekatan yang dijelaskan di sini .
EDIT 2: skrip versi lebih lanjut disediakan. Sekarang ini berfungsi dengan multi band raster dan memproses nilai-nilai NaN.
from osgeo import gdal
import sys
import math
path = "raster_path"
gdalData = gdal.Open(path)
if gdalData is None:
sys.exit( "ERROR: can't open raster" )
# get width and heights of the raster
xsize = gdalData.RasterXSize
ysize = gdalData.RasterYSize
# get number of bands
bands = gdalData.RasterCount
# process the raster
for i in xrange(1, bands + 1):
band_i = gdalData.GetRasterBand(i)
raster = band_i.ReadAsArray()
# create dictionary for unique values count
count = {}
# count unique values for the given band
for col in range( xsize ):
for row in range( ysize ):
cell_value = raster[row, col]
# check if cell_value is NaN
if math.isnan(cell_value):
cell_value = 'Null'
# add cell_value to dictionary
try:
count[cell_value] += 1
except:
count[cell_value] = 1
# print results sorted by cell_value
for key in sorted(count.iterkeys()):
print "band #%s - %s: %s" %(i, key, count[key])
count = dict(zip(*numpy.unique(a, return_counts=True)))
. Anda mungkin perlu memastikan Anda menjalankan Python 64-bit untuk menghindari kesalahan memori. Meskipun saya belum menguji bagaimana itu menangani NaN
.