Yanıtlar:
İki olası kolay yol:
1.)
"Corine@1" = 23
. Bu, 23 değeri olan tüm hücreleri yeni bir rastere çıkaracaktır.2.) Raster hücre sayısı hakkında daha karmaşık bir genel bakış istiyorsanız, QGIS için LecoS eklentisini kullanabilirsiniz.
EDIT 3 : Aşağıdaki kodu aşağıdaki çıktı veren oldukça kullanılabilir SEXTANTE komut dosyasına dönüştürdüm:
Ayrıntılı talimat ve indirme linki burada bulunabilir .
Bu görev için python konsolunu kullanabilirsiniz. Aşağıda verilen kodu kopyalayın, bir metin dosyasına yapıştırın ve örneğin "some_script.py" olarak kaydedin. Bir dahaki sefere hücre değerlerini saymanız gerektiğinde QGIS'de python konsolunu açın, 'edit editörü göster' düğmesine basın ve bu komut dosyasını orada açın. Sonra komut dosyasında dördüncü satırdaki 'raster_path' yerine rasterinize giden gerçek yolu yazın ve değişiklikleri kaydedin. Sonra komut dosyasını çalıştırın ve konsol çıktısında (aşağıdaki ekran görüntüsünden editörden solda) taramada sahip olduğunuz her değer için hücre sayısını göreceksiniz.
Bu komut dosyasının çalışması için python-numpy yüklü olması gerektiğini unutmayın.
DÜZENLEME: Ayrıca, kesin değerlere ihtiyacınız yoksa ancak değerlerin dağılımını görmek isterseniz, burada açıklanan yaklaşımı kullanabilirsiniz .
EDIT 2: sağlanan komut dosyasının daha ileri sürümü. Şimdi çok bantlı rasterlerle çalışır ve NaN değerlerini işler.
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)))
. Yine de bellek hatalarını önlemek için 64 bit Python çalıştırdığınızdan emin olmanız gerekebilir. Her ne kadar bunun nasıl işlediğini test etmeme rağmen NaN
.