Risposte:
Due possibili modi semplici:
1.)
"Corine@1" = 23
. Ciò estrarrà tutte le celle con valore 23 in un nuovo raster2.) Se si desidera una panoramica più sofisticata del numero di celle raster, è possibile utilizzare il plug-in LecoS per QGIS.
EDIT 3 : ho convertito il codice seguente in script SEXTANTE abbastanza utilizzabili che danno il seguente output:
Le istruzioni dettagliate e il link per il download sono disponibili qui .
È possibile utilizzare la console Python per questa attività. Copia il codice fornito di seguito, incollalo in un file di testo e salvalo come "some_script.py", ad esempio. La prossima volta dovrai contare i valori delle celle per aprire la console Python in QGIS, premere il pulsante "Mostra editor" e aprire questo script lì. Quindi sostituire 'raster_path' nella quarta riga dello script con il percorso effettivo del raster e salvare le modifiche. Quindi esegui lo script e nell'output della console (a sinistra dall'editor nella schermata seguente) vedrai il numero di celle per ogni valore che hai nel raster.
Nota che per far funzionare questo script dovrai aver installato python-numpy.
EDIT: Inoltre, se non hai bisogno di valori esatti ma preferisci vedere la distribuzione dei valori, puoi usare l'approccio descritto qui .
EDIT 2: versione più avanzata dello script fornita. Ora funziona con raster multibanda ed elabora i valori 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)))
. Tuttavia, potrebbe essere necessario assicurarsi di eseguire Python a 64 bit per evitare errori di memoria. Anche se non ho testato come funziona NaN
.