Câu trả lời:
Hai cách dễ dàng có thể:
1.)
"Corine@1" = 23
. Điều này sẽ trích xuất tất cả các ô có giá trị 23 vào một raster mới2.) Nếu bạn muốn có một cái nhìn tổng quan tinh vi hơn về số lượng tế bào raster, bạn có thể sử dụng plugin LecoS cho QGIS.
EDIT 3 : Tôi đã chuyển đổi mã bên dưới thành tập lệnh SEXTANTE khá có thể sử dụng để đưa ra kết quả sau:
Hướng dẫn chi tiết và liên kết tải xuống có thể được tìm thấy ở đây .
Bạn có thể sử dụng bàn điều khiển python cho nhiệm vụ này. Sao chép mã được cung cấp dưới đây, dán nó vào một tệp văn bản và lưu nó dưới dạng "some_script.py" chẳng hạn. Lần tới, bạn sẽ cần đếm các giá trị ô mở bảng điều khiển python trong QGIS, nhấn nút 'hiển thị trình chỉnh sửa' và mở tập lệnh này ở đó. Sau đó thay thế 'raster_path' trong hàng tiếp theo trong tập lệnh bằng đường dẫn thực tế đến trình raster của bạn và lưu các thay đổi. Sau đó chạy tập lệnh và trong đầu ra của bàn điều khiển (ở bên trái từ trình chỉnh sửa trên ảnh chụp màn hình bên dưới), bạn sẽ thấy số lượng ô cho mỗi giá trị bạn có trong raster.
Lưu ý rằng bạn sẽ cần phải cài đặt python-numpy để tập lệnh này hoạt động.
EDIT: Ngoài ra, nếu bạn không cần các giá trị chính xác nhưng bạn muốn xem phân phối các giá trị, bạn có thể sử dụng phương pháp được mô tả ở đây .
EDIT 2: phiên bản nâng cao hơn của kịch bản được cung cấp. Bây giờ nó hoạt động với các trình quét đa băng tần và xử lý các giá trị 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)))
. Tuy nhiên, bạn có thể cần đảm bảo rằng bạn đang chạy Python 64 bit để tránh lỗi bộ nhớ. Mặc dù tôi đã không kiểm tra làm thế nào mà xử lý NaN
.