GDAL में अलग-अलग आकार की आपदाओं को कैसे जोड़ा जाए, इसलिए इसका परिणाम केवल प्रतिच्छेदन क्षेत्र में है


11

मैं एक पायथन विधि लिख रहा हूं जो दो रेखापुंजों को जोड़ता है और एक एकल रास्टर आउटपुट उत्पन्न करता है। मेरे नियंत्रण से परे कारणों के लिए, इनपुट रिस्तों के विस्तार अलग हैं, लेकिन वे ओवरलैप करते हैं।

क्या यह विशेष रूप से इनपुट रेखापुंज पिक्सल पर संचालित करने के लिए संभव है जो 2 ओवरलैप किए गए क्षेत्रों में ओवरलैप किए गए हैं ताकि मेरा ouput उत्पन्न हो सके जैसे कि आउटपुट रेखापुंज सीमा केवल दो इनपुट के प्रतिच्छेदन क्षेत्र है?

जवाबों:


12

पहली बात यह है कि भू-स्थानिक निर्देशांक में अतिव्यापी आयत का निर्धारण करना है। ऐसा करने के लिए, आपको प्रत्येक स्रोत छवि के लिए जियोट्रांसफॉर्म मिलेगा:

gt1 = ds1.GetGeoTransform()
# r1 has left, top, right, bottom of dataset's bounds in geospatial coordinates.
r1 = [gt1[0], gt1[3], gt1[0] + (gt1[1] * ds1.RasterXSize), gt1[3] + (gt1[5] * ds1.RasterYSize)]

# Do the same for dataset 2 ...

intersection = [max(r1[0], r2[0]), min(r1[1], r2[1]), min(r1[2], r2[2]), max(r1[3], r2[3])]

फिर उस आयत को प्रत्येक छवि के लिए ऊपर और बाएँ निर्देशांक को जोड़कर पिक्सेल में बदल दें और पिक्सेल आकार को गोल करके विभाजित करें।

यहां से आप ReadRaster()प्रत्येक छवि पर कॉल कर सकते हैं , यह पिक्सेल एक्सेलेंट देता है जिसे आपने अभी गणना की है:

band.ReadRaster(px1[0], px1[1], px1[2] - px1[0], px1[3] - px1[1], px1[2] - px1[0], px1[3] - px1[1],
                # <band's datatype here>
)

मैं थोड़ा थक गया हूं, इसलिए अगर इससे कोई मतलब नहीं है, मुझे बताएं!


क्या यह अलग-अलग अनुमानों (उर्फ समन्वय संदर्भ प्रणालियों / स्थानिक संदर्भ प्रणालियों) के साथ आपदाओं के लिए भी काम करता है? और अगर अनुमानों एक ही कर रहे हैं: अगर यह भी काम करता है gt1[1]और gt2[1](या gt1[5]और gt2[5]) संकेत का विरोध किया है? (जो में से किसी एक को लंबवत रूप से या क्षैतिज रूप से फ्लिप करेगा, मुझे लगता है।) या यदि abs(gt1[2])और abs(gt1[4])से अधिक हैं abs(gt1[1])और abs(gt1[5])लेकिन abs(gt2[2])और की abs(gt2[4])तुलना में छोटे हैं ( abs(gt2[1])और abs(gt2[5])जो संभवतः आपदाओं में से एक को फ्लिप करेगा)?
दास- g

6

चौराहे का तीसरा तत्व न्यूनतम होना चाहिए (आर 1 [2], आर 2 [2]):

intersection = [max(r1[0], r2[0]), min(r1[1], r2[1]), min(r1[2], r2[2]), max(r1[3], r2[3])]

इसके अलावा, मैं कुछ तर्कों की जांच करने की सिफारिश करूंगा कि डेटासेट वास्तव में प्रतिच्छेद करते हैं।

यह एक दृष्टिकोण है:

if (intersection[2] < intersection[0]) or (intersection[1] < intersection[3]):
    intersection = None
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.