Відповіді:
Два можливих простих способу:
1.)
"Corine@1" = 23
. Це дозволить витягнути всі клітини зі значенням 23 у новий растр2.) Якщо ви хочете більш досконалий огляд кількості растрових комірок, ви можете використовувати плагін LecoS для QGIS.
EDIT 3 : Я перетворив код нижче в досить зручний сценарій SEXTANTE, який дає наступний вихід:
Детальну інструкцію та посилання для завантаження можна знайти тут .
Для цього завдання можна використовувати консоль python. Скопіюйте код, наданий нижче, вставте його в текстовий файл і збережіть, наприклад, "some_script.py". Наступного разу вам потрібно буде порахувати значення комірок відкрити консоль пітона в QGIS, натиснути кнопку "показати редактор" і відкрити цей скрипт там. Потім замініть "raster_path" у четвертому рядку сценарію на фактичний шлях до растру та збережіть зміни. Потім запустіть скрипт і на консольному виході (зліва від редактора на скріншоті нижче) ви побачите кількість комірок для кожного значення, яке ви маєте в растрі.
Зауважте, що для роботи цього сценарію вам потрібно буде встановити python-numpy.
EDIT: Крім того, якщо вам не потрібні точні значення, але ви хочете побачити розподіл значень, ви можете скористатися описаним тут підходом .
EDIT 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
.