Ответы:
Два возможных простых способа:
1.)
"Corine@1" = 23
. Это извлечет все ячейки со значением 23 в новый растр2.) Если вам нужен более сложный обзор количества растровых ячеек, вы можете использовать плагин LecoS для QGIS.
РЕДАКТИРОВАТЬ 3 : я преобразовал приведенный ниже код в довольно удобный скрипт SEXTANTE, который дает следующий вывод:
Подробную инструкцию и ссылку для скачивания можно найти здесь .
Вы можете использовать консоль Python для этой задачи. Скопируйте приведенный ниже код, вставьте его в текстовый файл и сохраните, например, как «some_script.py». В следующий раз вам нужно будет посчитать значения ячеек, открыть консоль Python в QGIS, нажать кнопку «Показать редактор» и открыть этот скрипт там. Затем замените '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
.