পাইথনে জিটিফের জন্য পরিসংখ্যান তৈরি করতে কীভাবে জিডিএল পাবেন


14

আমি পাইথনের জিডিএল দিয়ে নিয়মিত নিজের জিওটিআইএফএফ রেস্টার তৈরি করি, যেমন:

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

তবে ফলাফলটি যখন আর্কগ্ল্যাটালগ / আর্কজিআইএস-এর সাথে দেখা হয় তখন এটি কালো বা ধূসর দেখায়, কারণ এর কোনও পরিসংখ্যান নেই। এটি রাস্টারকে ডান ক্লিক করে এবং আর্টকিগ্ল্যাজে "পরিসংখ্যান গণনা ..." বাছাই করে বা এটি একটি কমান্ড প্রম্পটে gdalinfo ব্যবহার করে সমাধান করা হয়েছে:

gdalinfo -stats MyRaster.tif

উত্পন্ন হবে MyRaster.tif.aux.xml, যা আর্জিজিআইএস দ্বারা সঠিকভাবে রাস্টার স্কেল করতে ব্যবহৃত হয়। পিএএম (পার্সেন্ট্যান্ট অক্সিলিয়ারি মেটাডেটা) ফাইলে পরিসংখ্যান রয়েছে, উল্লেখযোগ্যভাবে সর্বনিম্ন এবং সর্বোচ্চ মান:

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

আমার প্রশ্ন: একটি পরিসংখ্যান ফাইল তৈরি করার জন্য জিডিএল পাওয়ার কোনও অন্তর্নির্মিত উপায় আছে ( gdalinfo -statsকমান্ডটি ব্যবহার করা ব্যতীত )? নাকি আমার নিজের লেখার দরকার আছে?

উত্তর:


13

পরিসংখ্যানগুলি পেতে আপনি গেটস্ট্যাটিক্স পদ্ধতি ব্যবহার করতে পারেন।

যেমন।

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

এটি ফিরে আসবে (ন্যূনতম, সর্বোচ্চ, গড়, স্টাডিডিভ)

যাতে এক্সএমএল পড়া যায়:

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

এক্সএমএল ফাইল তৈরি / পরিচালনা করার কোনও পাইথোনিক উপায় আমি জানি না the তবে সাথে থাকা এক্সএমএলটির সরল প্রকৃতির দিক দিয়ে এটি ফাইল আই / হে ক্রিয়াকলাপগুলির সাথে এটি তৈরি করা সুন্দর ট্রিওল হওয়া উচিত


5
দেখা যাচ্ছে যে band.GetStatistics(0,1)প্রকৃতপক্ষে পরিসংখ্যান গণনা করবে এবং একক ফাইলে এটি জিওটিআইএফএফ মেটাডেটাতে যুক্ত করবে। অন্য কোনও ফাইলের প্রয়োজন নেই। তবে এসরি পণ্যগুলির সাথে পরীক্ষা করা থেকে, এটি কেবল আর্কজিআইএস 10.0 এবং তার সাথে কাজ করে, আর্কিআইএস 9.3 বা তার আগে নয়।
মাইক টি

ফাংশনটি জিডিএল পৃষ্ঠায় বর্ণিত হয়েছে । তার ভিত্তিতে, ফাংশনে পাস হওয়া দুটি আর্গুমেন্টগুলি হ'ল বিপ্র্রোকসোক (যদি সত্য পরিসংখ্যানকে সংক্ষিপ্তসার বা সমস্ত টাইলের একটি উপসেটের ভিত্তিতে গণনা করা যেতে পারে) এবং বিফোরস (যদি ফ্যালএসের পরিসংখ্যান কেবল তা ফিরিয়ে আনা হয় তবে এটি চিত্র পুনরুদ্ধার না করেই করা যেতে পারে) ।

3

যদি পরিসংখ্যানগুলি ইতিমধ্যে গণনা করা হয় এবং ফাইলটি অভ্যন্তরীণভাবে অন্তর্ভুক্ত করা হয় তবে gdalinfo -statsGDAL 2.1.0 ব্যবহারের জন্য একটি অতিরিক্ত পিএএম পরিসংখ্যান ফাইল (.aux.xML) তৈরি করবেন না। তবে এটি আপনার নিজের জন্য .xML বাস্তবায়ন করা খুব সহজ। এখানে কিছু বিল্ট-ইন পাইথন মডিউলগুলি সেই জিনিসটি করার জন্য ব্যাখ্যা করা হয়েছে। নিজের জন্য আমি নীচের কোড সহ এলিমেট্রি এক্সএমএল এপিআই ব্যবহার করেছি :

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> 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.