回答:
2つの簡単な方法:
1.)
"Corine@1" = 23
ます。これにより、値23のすべてのセルが新しいラスターに抽出されます2.)ラスターセルの数に関するより洗練された概要が必要な場合は、QGISのLecoSプラグインを使用できます。
編集3:私は以下のコードを非常に使用可能なSEXTANTEスクリプトに変換し、次の出力を提供します:
詳細な手順とダウンロードリンクは、ここにあります。
このタスクにはPythonコンソールを使用できます。下記のコードをコピーし、テキストファイルに貼り付けて、たとえば「some_script.py」として保存します。セル値をカウントする必要がある場合は、QGISでPythonコンソールを開き、「エディターの表示」ボタンを押して、そこでスクリプトを開きます。次に、スクリプトの4行目の「raster_path」をラスターへの実際のパスに置き換えて、変更を保存します。次に、スクリプトを実行すると、コンソール出力(下のスクリーンショットのエディターの左側)に、ラスターにあるすべての値のセル数が表示されます。
このスクリプトを機能させるには、python-numpyをインストールする必要があることに注意してください。
編集:また、正確な値は必要ないが、値の分布を確認したい場合は、ここで説明するアプローチを使用できます。
編集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
。