Antworten:
Zwei mögliche einfache Wege:
1.)
"Corine@1" = 23
. Dadurch werden alle Zellen mit dem Wert 23 in ein neues Raster extrahiert2.) Wenn Sie einen genaueren Überblick über die Anzahl der Rasterzellen wünschen, können Sie das LecoS-Plugin für QGIS verwenden.
EDIT 3 : Ich habe den folgenden Code in ein gut verwendbares SEXTANTE-Skript konvertiert, das folgende Ausgabe liefert:
Eine ausführliche Anleitung und den Download-Link finden Sie hier .
Sie können die Python-Konsole für diese Aufgabe verwenden. Kopieren Sie den unten angegebenen Code, fügen Sie ihn in eine Textdatei ein und speichern Sie ihn beispielsweise als "some_script.py". Wenn Sie das nächste Mal die Zellenwerte zählen müssen, öffnen Sie die Python-Konsole in QGIS, klicken Sie auf die Schaltfläche "Editor anzeigen" und öffnen Sie dieses Skript dort. Ersetzen Sie dann 'raster_path' in der vierten Zeile im Skript durch den tatsächlichen Pfad zu Ihrem Raster und speichern Sie die Änderungen. Führen Sie dann das Skript aus und in der Konsolenausgabe (links vom Editor auf dem Screenshot unten) sehen Sie die Anzahl der Zellen für jeden Wert, den Sie im Raster haben.
Beachten Sie, dass python-numpy installiert sein muss, damit dieses Skript funktioniert.
BEARBEITEN: Wenn Sie keine genauen Werte benötigen, aber lieber die Verteilung der Werte sehen möchten, können Sie den hier beschriebenen Ansatz verwenden .
EDIT 2: Vorabversion des Skripts bereitgestellt. Jetzt funktioniert es mit Multiband-Rastern und verarbeitet NaN-Werte.
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)))
. Möglicherweise müssen Sie jedoch sicherstellen, dass Sie 64-Bit-Python ausführen, um Speicherfehler zu vermeiden. Obwohl ich nicht getestet habe, wie das geht NaN
.