पायथन में जीटीएफ के लिए आंकड़े बनाने के लिए GDAL कैसे प्राप्त करें


14

मैं नियमित रूप से पायथन में GDAL के साथ अपने खुद के GeoTIFF आपदाओं का निर्माण करता हूं, जैसे:

from osgeo import gdal
from numpy import random
data = random.uniform(0, 10, (300, 200))
driver = gdal.GetDriverByName('GTiff')
ds = driver.Create('MyRaster.tif', 200, 300)
band = ds.GetRasterBand(1)
band.WriteArray(data)
ds = band = None # save, close

हालाँकि जब परिणाम ArcCatalog / ArcGIS के साथ देखा जाता है, तो यह या तो काले या भूरे रंग का दिखता है, क्योंकि इसके कोई आँकड़े नहीं हैं। यह या तो रेखापुंज को राइट-क्लिक करके और "गणना सांख्यिकी ..." आर्ककॉस्टिक्स में चुना जाता है (ऐसा करने के कई अन्य तरीके हैं), या कमांड प्रॉम्प्ट में gdalinfo का उपयोग करके :

gdalinfo -stats MyRaster.tif

उत्पन्न करेगा MyRaster.tif.aux.xml, जिसका उपयोग आर्कजीआईएस द्वारा सही ढंग से रेखापुंज करने के लिए किया जाता है। PAM (लगातार सहायक मेटाडेटा) फ़ाइल में आँकड़े होते हैं, विशेष रूप से न्यूनतम और अधिकतम मान:

<PAMDataset>
  <PAMRasterBand band="1">
    <Metadata>
      <MDI key="STATISTICS_MINIMUM">0</MDI>
      <MDI key="STATISTICS_MAXIMUM">10</MDI>
      <MDI key="STATISTICS_MEAN">5.0189833333333</MDI>
      <MDI key="STATISTICS_STDDEV">2.9131294111984</MDI>
    </Metadata>
  </PAMRasterBand>
</PAMDataset>

मेरा प्रश्न: क्या एक GDAL प्राप्त करने का एक अंतर्निहित तरीका है जो एक आँकड़ों की फाइल बनाने के लिए है ( gdalinfo -statsकमांड का उपयोग करने के अलावा )? या क्या मुझे अपना लिखने की आवश्यकता है?

जवाबों:


13

आप आँकड़े प्राप्त करने के लिए GetStatistics विधि का उपयोग कर सकते हैं।

जैसे।

stats =   ds.GetRasterBand(1).GetStatistics(0,1)

यह वापस आ जाएगा (न्यूनतम, अधिकतम, माध्य, StdDev)

तो xml पढ़ा जा सकता है:

<PAMDataset>
  <PAMRasterBand band="1">
    <Metadata>
      <MDI key="STATISTICS_MINIMUM">stats[0]</MDI>
      <MDI key="STATISTICS_MAXIMUM">stats[1]</MDI>
      <MDI key="STATISTICS_MEAN">stats[2]</MDI>
      <MDI key="STATISTICS_STDDEV">stats[3]</MDI>
    </Metadata>
  </PAMRasterBand>
</PAMDataset>

मुझे xml फ़ाइल बनाने / हेरफेर करने का कोई भी पाइथोनिक तरीका नहीं पता है। लेकिन साथ में दिए गए xml की सरलीकृत प्रकृति को देखते हुए इसे फ़ाइल I / O संचालन के साथ बनाने के लिए बहुत ही आकर्षक होना चाहिए


6
यह पता चला है कि band.GetStatistics(0,1)वास्तव में आंकड़ों की गणना करेगा, और सिंगल फाइल में इसे जियोटीफ़ मेटाडेटा में जोड़ देगा। किसी अन्य फाइल की आवश्यकता नहीं है। हालांकि Esri उत्पादों के साथ परीक्षण से, यह केवल ArcGIS 10.0 और ऊपर के साथ काम करता है, ArcGIS 9.3 या इससे पहले नहीं।
माइक टी।

1
समारोह GDAL पेज पर वर्णित है । उसके आधार पर, फ़ंक्शन में दिए गए दो तर्क bApproxOK हैं (यदि TRUE आंकड़े ओवरव्यू या सभी टाइलों के एक उपसमूह के आधार पर गणना किए जा सकते हैं) और bForce (यदि FALSE आँकड़े केवल तभी वापस आ जाएंगे यदि यह छवि को फिर से व्यवस्थित किए बिना किया जा सकता है) ।

3

यदि आँकड़ों की पहले से गणना की जाती है और आंतरिक रूप से फ़ाइल में शामिल किया जाता है, तो gdalinfo -statsGDAL 2.1.0 का उपयोग करने के लिए एक अतिरिक्त PAM आँकड़ों की फ़ाइल (.aux.xml) बनाएँ। लेकिन अपने खुद के लिए .xml लागू करने के लिए यह बहुत आसान है। यहाँ कुछ अंतर्निहित पायथन मॉड्यूल हैं जो उस सामान को करने के लिए समझाया गया है। अपने लिए मैंने नीचे दिए गए कोड के साथ ElementTree XML API का उपयोग किया है :

import xml.etree.cElementTree as ET

stats = file.GetRasterBand(band).GetStatistics(0,1)

pamDataset = ET.Element("PAMDataset")
pamRasterband = ET.SubElement(pamDataset, "PAMRasterBand", band="1")
metadata = ET.SubElement(pamRasterband, "Metadata")
ET.SubElement(metadata, "MDI", key = "STATISTICS_MAXIMUM").text = str(stats[1])
ET.SubElement(metadata, "MDI", key = "STATISTICS_MEAN").text = str(stats[2])
ET.SubElement(metadata, "MDI", key = "STATISTICS_MINIMUM").text = str(stats[0])
ET.SubElement(metadata, "MDI", key = "STATISTICS_STDDEV").text = str(stats[3])

tree = ET.ElementTree(pamDataset)
tree.write(destFilePath + ".aux.xml")

परिणाम जैसा दिखता है:

<PAMDataset>
    <PAMRasterBand band="1">
        <Metadata>
            <MDI key="STATISTICS_MINIMUM">-40.65</MDI>
            <MDI key="STATISTICS_MEAN">10.2929293137</MDI>
            <MDI key="STATISTICS_MAXIMUM">45.050012207</MDI>
            <MDI key="STATISTICS_STDDEV">17.4892321447</MDI>
        </Metadata>
    </PAMRasterBand>
</PAMDataset> 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.