Belirli bir değere sahip hücre sayısı nasıl hesaplanır?


11

Tüm hücreler -3 ve 7 arasında değerlere sahip bir raster dosyası var, hiçbir veri değeri -9999. Belirli bir değere sahip hücre sayısını nasıl hesaplayabilirim, örneğin 6? Hesap makinesini kullanabilir miyim?

Yanıtlar:


16

İki olası kolay yol:
1.)

  • Henüz mevcut değilse QGIS tarama hesaplayıcısını yükleyin (hangi QGIS sürümünü kullandığınızı belirtmediniz)
  • QGIS tarama hesaplayıcısını böyle bir formülle kullanın "Corine@1" = 23. Bu, 23 değeri olan tüm hücreleri yeni bir rastere çıkaracaktır.
  • Sonra toplam hücre toplamı hesaplamak için QGIS için SEXTANTE araç kutusu içinde "Raster Katman istatistikleri" aracını kullanın.

resim açıklamasını buraya girin

2.) Raster hücre sayısı hakkında daha karmaşık bir genel bakış istiyorsanız, QGIS için LecoS eklentisini kullanabilirsiniz.

  • Bilgisayarınıza Numpy, Scipy ve PIL yüklediğinizden emin olun. Blogumda veya burada Windows'ta nasıl yapılacağına dair bir talimat bulun .
  • Eklenti yükleyicisinden LecoS'u indirin ve etkinleştirin. Hiçbir hata çıkmamalıdır.
  • Raster şeklinizle Landcover istatistik aracını (Menü Raster -> Peyzaj Ekolojisi -> Landcover istatistikleri) çalıştırın. Şeklinizin doğru bir projeksiyona, ayarlanmış veri yok değerine ve ayrıca kare tarama hücrelerine sahip olduğundan emin olun.
  • Aşağıda gösterilen seçenekleri seçin. Sonuçları bir .csv dosyasına kaydedebilirsiniz. Çıktılar, tüm toprak örtüsü sınıflarınız için toplam toprak örtüsü (hücre numarası * raster hücre boyutu ^ 2) içerir. resim açıklamasını buraya girin

1
Sadece bu günlerde araç kutusunun İşleme olarak adlandırıldığını unutmayın .
Luís de Sousa

9

EDIT 3 : Aşağıdaki kodu aşağıdaki çıktı veren oldukça kullanılabilir SEXTANTE komut dosyasına dönüştürdüm: resim açıklamasını buraya girin

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])

resim açıklamasını buraya girin


Aslında bir döngü kullanmaktan çok daha kolay. Şunları yapabilirsiniz doğrudan numpy kullanarak sayımlarını olsun : 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.
jpmc26
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.