Answers:
两种可能的简单方法:
1.)
"Corine@1" = 23
。这会将所有值23的像元提取到新栅格中2)如果您想更详细地了解栅格像元的数量,可以使用LecoS插件进行QGIS。
编辑3:我将下面的代码转换为相当有用的SEXTANTE脚本,该脚本提供以下输出:
详细说明和下载链接可以在此处找到。
您可以使用python控制台执行此任务。复制下面提供的代码,将其粘贴到文本文件中,然后将其另存为“ some_script.py”。下次您将需要计算单元格值时,请在QGIS中打开python控制台,单击“显示编辑器”按钮,然后在此处打开此脚本。然后,将脚本第四行中的“ raster_path”替换为栅格的实际路径并保存更改。然后运行脚本,并在控制台输出中(在下面的屏幕快照的编辑器左侧),您将看到栅格中每个值的像元数。
请注意,您需要安装python-numpy才能运行此脚本。
编辑:另外,如果您不需要精确的值,但希望查看值的分布,则可以使用此处描述的方法。
编辑2:提供了脚本的更高级版本。现在,它可以处理多波段栅格并处理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)))
。不过,您可能需要确保运行64位Python以避免内存错误。尽管我还没有测试怎样处理NaN
。