উপাত্ত বিন্যাস
ডেটা রিডারকে কীভাবে প্রোগ্রাম করবেন তা আমি একটু অনুশীলন হিসাবে নেব। ডকুমেন্টেশন একবার দেখুন :
এসআরটিএম ডেটা দুটি স্তরে বিতরণ করা হয়: এসআরটিএম 1 (মার্কিন যুক্তরাষ্ট্রে এবং এর অঞ্চলগুলি এবং সংস্থাগুলির জন্য) অক্ষাংশ এবং দ্রাঘিমাংশের এক আরক-সেকেন্ডের বিরতিতে ডেটা নমুনাযুক্ত এবং এসআরটিএম 3 (বিশ্বের জন্য) তিনটি চাপ-সেকেন্ডে নমুনাযুক্ত।
"ভৌগলিক" প্রক্ষেপণে ডেটা এক ডিগ্রি অক্ষাংশ এবং দ্রাঘিমাংশ টাইলগুলিতে বিভক্ত করা হয়, যা হ'ল ম্যানিপুলেট এবং মোজাইক ছাড়া কোনও প্রক্ষেপণে অক্ষাংশ এবং দ্রাঘিমাণের সমান বিরতি সহ একটি রাস্টার উপস্থাপনা বলে।
ফাইলের নামগুলি টাইলের নীচের বাম কোণার অক্ষাংশ এবং দ্রাঘিমাংশকে বোঝায় - যেমন এন 37 ডাব্লু 105 এর নিম্ন বাম কোণটি 37 ডিগ্রি উত্তর অক্ষাংশ এবং 105 ডিগ্রি পশ্চিম দ্রাঘিমাংশে রয়েছে has আরও সঠিকভাবে বলতে গেলে, এই স্থানাঙ্কগুলি নীচের বাম পিক্সেলের জ্যামিতিক কেন্দ্রকে বোঝায়, যা এসআরটিএম 3 ডেটার ক্ষেত্রে প্রায় 90 মিটার পরিমাণে হবে।
উচ্চতা ফাইলগুলির এক্সটেনশন .HGT রয়েছে এবং দুটি বাইট সংখ্যায় স্বাক্ষরিত হয়। বাইটগুলি মটরোলা "বিগ-এন্ডিয়ান" ক্রমে সর্বাধিক উল্লেখযোগ্য বাইট রয়েছে যা সান স্পার্ক, সিলিকন গ্রাফিক্স এবং ম্যাকিনটোস কম্পিউটারগুলি পাওয়ার পিসি প্রসেসর ব্যবহার করে সরাসরি পাঠযোগ্য। ডিইসি আলফা, 2006 এর পরে নির্মিত বেশিরভাগ পিসি এবং ম্যাকিনটোস কম্পিউটারগুলি ইন্টেল ("লিটল-এন্ডিয়ান") অর্ডার ব্যবহার করে যাতে কিছু বাইট-অদলবদলের প্রয়োজন হতে পারে। উচ্চতাগুলি WGS84 / EGM96 জিওডের সাথে সম্পর্কিত মিটারে রয়েছে। ডেটা voids মান -32768 নির্ধারিত হয়।
কিভাবে এগিয়ে যেতে হবে
আপনার অবস্থানের জন্য, 50 ° 24'58.888 "এন 14 ° 55'11.377" ই, আপনি ইতিমধ্যে সঠিক টাইলটি পেয়ে গেছেন, N50E14.hgt। আসুন আপনি কোন পিক্সেলটিতে আগ্রহী তা খুঁজে বার করুন First প্রথম অক্ষাংশ, 50 ° 24'58.888 "N:
24'58.888" = (24 * 60)" + 58.888" = 1498.888"
চাপ সেকেন্ড। তিনটি দ্বারা বিভক্ত এবং নিকটতম পূর্ণসংখ্যার সাথে বৃত্তাকারে 500 এর গ্রিড সারি দেয় long গ্রিড কলামে 1104 দ্রাঘিমাংশের জন্য দ্রাঘিমাংশের ফলাফলের জন্য একই গণনা।
কুইকস্টার্ট ডকুমেন্টেশনে ফাইলটিতে সারি এবং কলামগুলি কীভাবে সংগঠিত করা হয় সে সম্পর্কে তথ্যের অভাব রয়েছে, তবে সম্পূর্ণ ডকুমেন্টেশনে এটি বর্ণিত হয়েছে যে
ডেটা সারি প্রধান ক্রমে সংরক্ষণ করা হয় (সারি 1 এর সমস্ত ডেটা, সারি 2 এর সমস্ত ডেটা ইত্যাদি)
ফাইলটির প্রথম সারিটি খুব সম্ভবত উত্তরতমতম এক, অর্থাত্ যদি আমরা নীচের প্রান্ত থেকে 500 সারিটিতে আগ্রহী হয় তবে আমাদের অবশ্যই সারিটি দেখতে হবে
1201 - 500 = 701
শুরু থেকে ফাইল যদি । আমাদের গ্রিড সেলটি নম্বর
(1201 * 700) + 1104 = 841804
ফাইলটির শুরু থেকে (অর্থাত্ 700 টি সারি বাদ দিন, এবং 701 ম একের মধ্যে 1104 নমুনা নিন)। নমুনা প্রতি দুটি বাইট মানে আমাদের ফাইলের প্রথম 1683606 বাইট বাদ দিতে হবে এবং তারপরে আমাদের গ্রিড সেলটি পেতে দুটি বাইট পড়তে হবে। ডেটা বিগ-এন্ডিয়ান, যার অর্থ আপনার যেমন দুটি বাইট যেমন ইন্টেল প্ল্যাটফর্মগুলিতে অদলবদল করা দরকার।
নমুনা প্রোগ্রাম
একটি সরল পাইথন প্রোগ্রাম ডান ডেটা পুনরুদ্ধার করতে (দেখুন ভালো দেখাবে ডক্স struct হয় মডিউল ব্যবহারের জন্য):
import struct
def get_sample(filename, n, e):
i = 1201 - int(round(n / 3, 0))
j = int(round(e / 3, 0))
with open(filename, "rb") as f:
f.seek(((i - 1) * 1201 + (j - 1)) * 2) # go to the right spot,
buf = f.read(2) # read two bytes and convert them:
val = struct.unpack('>h', buf) # ">h" is a signed two byte integer
if not val == -32768: # the not-a-valid-sample value
return val
else:
return None
if __name__ == "__main__":
n = 24 * 60 + 58.888
e = 55 * 60 + 11.377
tile = "N50E14.hgt" # Or some magic to figure it out from position
print get_sample(tile, n, e)
নোট করুন যে দক্ষ ডেটা পুনরুদ্ধারের জন্য আরও কিছু পরিশীলিত দেখতে হবে (উদাহরণস্বরূপ প্রতিটি নমুনার জন্য ফাইলটি খোলার নয়)।
বিকল্প
আপনি এমন একটি প্রোগ্রামও ব্যবহার করতে পারেন যা বাক্সের বাইরে .hgt ফাইলগুলি পড়তে পারে। কিন্তু এটি বিরক্তিকর।
.hgt
ফাইল ফর্ম্যাটে কিছু নোট রয়েছে তবে আপনার উপলব্ধ সফ্টওয়্যারটির উপর একটি নির্দিষ্ট ধাপে ধাপে উত্তর নির্ভর করে।