জিডিএল-এ বিভিন্ন আকারের রাস্টারগুলি কীভাবে যুক্ত করবেন তাই ফলাফল কেবল ছেদযুক্ত অঞ্চলে


11

আমি একটি পাইথন পদ্ধতি লিখছি যা দুটি রাস্টার যুক্ত করে এবং একটি একক রাস্টার আউটপুট উত্পন্ন করে। আমার নিয়ন্ত্রণ ছাড়িয়ে যাওয়ার কারণে, ইনপুট রাস্টারগুলির এক্সটেন্টগুলি আলাদা, তবে তারা ওভারল্যাপ করে।

আমার আউটপুটটি উত্পন্ন করার জন্য 2 ওভারল্যাপযুক্ত অঞ্চলে যে ইনপুট রাস্টার পিক্সেলগুলি ওভারল্যাপ করা হয়েছে তাতে একচেটিয়াভাবে পরিচালনা করা সম্ভব হবে যে আউটপুট রাস্টার মাত্রা দুটি ইনপুটগুলির ছেদ করার ক্ষেত্র মাত্র?

উত্তর:


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])) বিরোধী চিহ্ন থাকলেও এটি কি কাজ করে ? (উল্লম্বভাবে বা অনুভূমিকভাবে rasters এক টুসকি হবে কোনটি, আমি মনে করি।) অথবা যদি abs(gt1[2])এবং abs(gt1[4])তার চেয়ে অনেক বেশী হয় abs(gt1[1])এবং abs(gt1[5])কিন্তু abs(gt2[2])abs(gt2[4])চেয়ে ছোট হয় abs(gt2[1])এবং abs(gt2[5])(সম্ভবত তির্যকভাবে rasters এক টুসকি হবে যা)?
দাস-জি

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