डेटा स्वरूप
मैं इसे एक छोटे से अभ्यास के रूप में ले जाऊंगा कि डेटा रीडर कैसे प्रोग्राम किया जाए। प्रलेखन पर एक नज़र है :
SRTM डेटा को दो स्तरों में वितरित किया जाता है: SRTM1 (अमेरिका और इसके प्रदेशों और संपत्ति के लिए) अक्षांश और देशांतर में एक चाप-दूसरे अंतराल पर डेटा के साथ, और SRTM3 (दुनिया के लिए) तीन चाप-सेकंड में नमूना लिया गया।
"भौगोलिक" प्रक्षेपण में डेटा को एक डिग्री अक्षांश और देशांतर टाइल से एक में विभाजित किया जाता है, जिसे अक्षांश और देशांतर के बराबर अंतराल के साथ एक रेखापुंज प्रस्तुति कहना है, लेकिन सभी में हेरफेर और मोज़ेक के लिए आसान नहीं है।
फ़ाइल के नाम टाइल के निचले बाएँ कोने के अक्षांश और देशांतर को संदर्भित करते हैं - उदाहरण के लिए N37W105 का 37 डिग्री उत्तरी अक्षांश और 105 डिग्री पश्चिम देशांतर पर इसका निचला बाएँ कोने में है। अधिक सटीक होने के लिए, ये निर्देशांक निचले बाएँ पिक्सेल के ज्यामितीय केंद्र को संदर्भित करते हैं, जो SRTM3 डेटा के मामले में लगभग 90 मीटर की दूरी पर होगा।
ऊंचाई फ़ाइलों में एक्सटेंशन .HGT होता है और दो बाइट पूर्णांक पर हस्ताक्षर किए जाते हैं। बाइट्स मोटोरोला "बिग-एंडियन" क्रम में सबसे महत्वपूर्ण बाइट के साथ हैं, सीधे पावर पीसी प्रोसेसर का उपयोग करके सन स्पार्क, सिलिकॉन ग्राफिक्स और मैकिंटोश कंप्यूटर जैसे सिस्टम द्वारा सीधे पढ़ा जा सकता है। डीईसी अल्फा, अधिकांश पीसी और मैकिन्टोश कंप्यूटर 2006 के बाद निर्मित इंटेल ("लिटिल-एंडियन") आदेश का उपयोग करते हैं, इसलिए कुछ बाइट-स्वैपिंग आवश्यक हो सकती है। मीटर WGS84 / EGM96 जियोइड के संदर्भ में मीटर में हैं। डेटा voids को -32768 मान दिया जाता है।
कैसे आगे बढ़ा जाए
आपकी स्थिति के लिए, 50 ° 24'58.888 "N 14 ° 55'11.377" E, आपको पहले से ही सही टाइल, N50E14.hgt मिला। आइए जानें कि आप किस पिक्सेल में रुचि रखते हैं। पहला अक्षांश, 50 ° 24'58.888 "N:
24'58.888" = (24 * 60)" + 58.888" = 1498.888"
चाप सेकंड। तीन से विभाजित और निकटतम पूर्णांक तक गोल 500 की ग्रिड पंक्ति देता है। ग्रिड कॉलम 1104 में देशांतर परिणाम के लिए एक ही गणना।
क्विकस्टार्ट प्रलेखन में फ़ाइल में पंक्तियों और स्तंभों को कैसे व्यवस्थित किया जाता है, इसके बारे में जानकारी का अभाव है, लेकिन पूर्ण प्रलेखन में यह कहा गया है कि
डेटा पंक्ति प्रमुख क्रम में संग्रहीत किया जाता है (पंक्ति 1 के लिए सभी डेटा, इसके बाद पंक्ति 2 के लिए सभी डेटा, आदि)
फ़ाइल में पहली पंक्ति सबसे उत्तरी एक होने की संभावना है, अर्थात यदि हम निचले किनारे से पंक्ति 500 में रुचि रखते हैं , तो हमें वास्तव में पंक्ति को देखना होगा
1201 - 500 = 701
शुरू से अगर फ़ाइल । हमारा ग्रिड सेल नंबर है
(1201 * 700) + 1104 = 841804
फ़ाइल की शुरुआत से (यानी 700 पंक्तियों को छोड़ें, और 701 में एक नमूना 1104 लें)। प्रति नमूना दो बाइट्स का मतलब है कि हमें फ़ाइल में पहले 1683606 बाइट्स को छोड़ना होगा और फिर अपनी ग्रिड सेल प्राप्त करने के लिए दो बाइट्स पढ़ना होगा। डेटा बड़ा-एंडियन है, जिसका अर्थ है कि आपको उदाहरण के लिए इंटेल प्लेटफॉर्म पर दो बाइट्स स्वैप करना होगा।
नमूना कार्यक्रम
सही डेटा पुनर्प्राप्त करने के लिए एक सरलीकृत पायथन कार्यक्रम इस तरह दिखाई देगा ( संरचना मॉड्यूल के उपयोग के लिए डॉक्स देखें ):
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
में फ़ाइल प्रारूप पर कुछ नोट्स हैं , लेकिन एक विशिष्ट चरण-दर-चरण उत्तर आपके द्वारा उपलब्ध सॉफ़्टवेयर पर निर्भर करता है।