Odpowiedzi:
Dwa możliwe łatwe sposoby:
1.)
"Corine@1" = 23
. Spowoduje to wyodrębnienie wszystkich komórek o wartości 23 do nowego rastra2.) Jeśli chcesz bardziej zaawansowanego przeglądu liczby komórek rastrowych, możesz użyć wtyczki LecoS dla QGIS.
EDYCJA 3 : Przekształciłem poniższy kod w całkiem użyteczny skrypt SEXTANTE, który daje następujące wyniki:
Szczegółowa instrukcja i link do pobrania można znaleźć tutaj .
Do tego zadania możesz użyć konsoli Python. Skopiuj poniższy kod, wklej go do pliku tekstowego i zapisz na przykład jako „some_script.py”. Następnym razem będziesz musiał policzyć wartości komórek, otwórz konsolę python w QGIS, naciśnij przycisk „pokaż edytor” i otwórz tam ten skrypt. Następnie zamień „raster_path” w czwartym wierszu skryptu na rzeczywistą ścieżkę do rastra i zapisz zmiany. Następnie uruchom skrypt i w wynikach konsoli (po lewej stronie edytora na zrzucie ekranu poniżej) zobaczysz liczbę komórek dla każdej wartości, którą masz w rastrze.
Pamiętaj, że aby skrypt działał, musisz zainstalować Python-Numpy.
EDYCJA: Ponadto, jeśli nie potrzebujesz dokładnych wartości, ale wolisz zobaczyć rozkład wartości, możesz zastosować opisane tutaj podejście .
EDYCJA 2: udostępniono bardziej zaawansowaną wersję skryptu. Teraz działa z wielopasmowymi rastrami i przetwarza wartości 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)))
. Jednak może być konieczne upewnienie się, że używasz 64-bitowego języka Python, aby uniknąć błędów pamięci. Chociaż nie testowałem, jak to działa NaN
.