किसी दिए गए मान के साथ कोशिकाओं की संख्या की गणना कैसे करें?


11

मेरे पास एक रास्टर फ़ाइल है जहां सभी कक्षों में -3 ​​और 7 के बीच मान हैं, कोई डेटा मान -9999 नहीं है। मैं एक विशिष्ट मान के साथ कोशिकाओं की संख्या की गणना कैसे कर सकता हूं, जैसे 6? क्या मैं कैलकुलेटर का उपयोग कर सकता हूं?

जवाबों:


16

दो संभव आसान तरीके:
1.)

  • QGIS रेखापुंज कैलकुलेटर को स्थापित करें यदि यह पहले से उपलब्ध नहीं है (आपने यह निर्दिष्ट नहीं किया कि आप कौन सा QGIS संस्करण उपयोग कर रहे हैं)
  • इस तरह के फॉर्मूले के साथ QGIS रैस्टर कैलकुलेटर का उपयोग करें "Corine@1" = 23। यह सभी कोशिकाओं को एक नए रेखापुंज में मान 23 के साथ निकालेगा
  • फिर कोशिकाओं के कुल योग की गणना के लिए QGIS के लिए SEXTANTE टूलबॉक्स के भीतर "रैस्टर लेयर सांख्यिकी" टूल का उपयोग करें।

यहाँ छवि विवरण दर्ज करें

2.) यदि आप रेखापुंज कोशिकाओं की संख्या पर अधिक परिष्कृत अवलोकन चाहते हैं तो आप QGIS के लिए LecoS प्लगइन का उपयोग कर सकते हैं।

  • सुनिश्चित करें कि आपने अपने कंप्यूटर पर Numpy, Scipy और PIL स्थापित किया है। एक निर्देश प्राप्त करें कि इसे मेरे ब्लॉग पर विंडोज पर या यहां कैसे करें
  • प्लगइन इंस्टॉलर से लेको डाउनलोड करें और इसे सक्षम करें। कोई त्रुटि नहीं होनी चाहिए।
  • अपने रैस्टर आकार के साथ लैंडकवर सांख्यिकी टूल (मेनू रस्टर -> लैंडस्केप इकोलॉजी -> लैंडकवर सांख्यिकी) को चलाएं। सुनिश्चित करें कि आपके आकार में एक सही प्रक्षेपण, एक सेट नो-डेटा मूल्य और वर्ग रेखापुंज कोशिकाएं भी हैं।
  • नीचे प्रदर्शित विकल्पों को चुनें। आप .csv फ़ाइल में परिणाम सहेज सकते हैं। आउटपुट में आपके सभी लैंडकवर वर्गों के लिए कुल लैंडकवर (सेलनंबर * रैस्टर सेललाइज़ ^ 2) शामिल हैं। यहाँ छवि विवरण दर्ज करें

1
बस ध्यान दें कि इन दिनों टूलबॉक्स को प्रोसेसिंग कहा जाता है ।
लुइस डी सूसा

9

EDIT 3 : मैंने नीचे दिए गए कोड को काफी प्रयोग योग्य STEANTE स्क्रिप्ट में परिवर्तित किया जो निम्न आउटपुट देता है: यहाँ छवि विवरण दर्ज करें

विस्तृत निर्देश और डाउनलोड लिंक यहां पाया जा सकता है


आप इस कार्य के लिए अजगर कंसोल का उपयोग कर सकते हैं। नीचे दिए गए कोड को कॉपी करें, इसे एक टेक्स्ट फ़ाइल में पेस्ट करें और उदाहरण के लिए इसे "some_script.py" के रूप में सहेजें। अगली बार आपको QGIS में सेल वैल्यू ओपन पाइथन कंसोल, हिट 'शो एडिटर' बटन को गिनना होगा और वहां इस स्क्रिप्ट को खोलना होगा। फिर स्क्रिप्ट में अगली पंक्ति में 'raster_path' को अपने रैस्टर के वास्तविक पथ के साथ बदलें और परिवर्तनों को सहेजें। फिर स्क्रिप्ट चलाएं और कंसोल आउटपुट में (नीचे स्क्रीनशॉट पर संपादक से बाईं ओर) आप रेखापुंज में आपके पास हर मूल्य के लिए कोशिकाओं की संख्या देखेंगे।

ध्यान दें कि इस स्क्रिप्ट को काम करने के लिए आपको अजगर-सुन्न स्थापित करने की आवश्यकता होगी।

संपादित करें: इसके अलावा, यदि आपको सटीक मानों की आवश्यकता नहीं है, लेकिन आप मानों का वितरण देखना चाहते हैं, तो आप यहाँ वर्णित दृष्टिकोण का उपयोग कर सकते हैं

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

यहाँ छवि विवरण दर्ज करें


यह वास्तव में एक लूप का उपयोग करने की तुलना में बहुत आसान है। आप कर सकते हैं मायने रखता है सीधे numpy का उपयोग कर पाने : count = dict(zip(*numpy.unique(a, return_counts=True)))। आपको यह सुनिश्चित करने की आवश्यकता हो सकती है कि आप मेमोरी त्रुटियों से बचने के लिए 64-बिट पायथन चला रहे हैं। हालांकि मैंने परीक्षण नहीं किया है कि यह कैसे संभालता है NaN
jpmc26
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.