জলের রূপান্তর স্তরটি ক্ষণস্থায়ী জলের জন্য দুটি অতিরিক্ত শ্রেণির (ক্ষণস্থায়ী স্থায়ী এবং ক্ষণস্থায়ী ঋতু) জলের তিনটি শ্রেণির (জল নয়, মৌসুমি জল এবং স্থায়ী জল) মধ্যে পরিবর্তনগুলি ক্যাপচার করে।
টিউটোরিয়ালের এই বিভাগটি করবে:
- জল স্থানান্তর কল্পনা করার জন্য একটি মানচিত্র স্তর যোগ করুন,
- একটি নির্দিষ্ট অঞ্চল-আগ্রহের মধ্যে প্রতিটি ট্রানজিশন ক্লাসের ক্ষেত্রফল যোগ করার জন্য একটি গ্রুপড রিডুসার তৈরি করুন এবং
- একটি চার্ট তৈরি করুন যা স্থানান্তর শ্রেণীর দ্বারা এলাকার সংক্ষিপ্তসার করে।
বেসিক ভিজ্যুয়ালাইজেশন
স্ক্রিপ্টের সম্পদ তালিকা বিভাগে, নিম্নলিখিত বিবৃতি যোগ করুন যা একটি একক ব্যান্ড চিত্র বস্তু তৈরি করে যাকে transition
বলা হয়:
কোড এডিটর (জাভাস্ক্রিপ্ট)
var transition = gsw.select('transition');
GSW ছবিতে ট্রানজিশন ক্লাস নম্বর এবং নামের মেটাডেটা এবং ট্রানজিশন ক্লাস স্টাইল করার জন্য একটি ডিফল্ট প্যালেট রয়েছে। যখন রূপান্তর স্তরটি মানচিত্রে যোগ করা হয়, তখন এই ভিজ্যুয়ালাইজেশন পরামিতিগুলি স্বয়ংক্রিয়ভাবে ব্যবহার করা হবে।
আপনার স্ক্রিপ্টের মানচিত্র স্তর বিভাগের নীচে, নিম্নলিখিত বিবৃতি যোগ করুন যা একটি নতুন মানচিত্র স্তর যুক্ত করে যা ট্রানজিশন ক্লাসগুলি প্রদর্শন করে:
কোড এডিটর (জাভাস্ক্রিপ্ট)
Map.setCenter(105.26, 11.2134, 9); // Mekong River Basin, SouthEast Asia Map.addLayer({ eeObject: transition, name: 'Transition classes (1984-2015)', });
আপনি যখন স্ক্রিপ্টটি চালাবেন, তখন রূপান্তর স্তরটি প্রদর্শিত হবে।

ট্রানজিশন ক্লাসের জন্য ম্যাপ কী হল:
মান | প্রতীক | লেবেল |
---|---|---|
0 | জল নয় | |
1 | স্থায়ী | |
2 | নতুন স্থায়ী | |
3 | চিরতরে হারিয়ে গেছে | |
4 | মৌসুমী | |
5 | নতুন মৌসুমী | |
6 | হারিয়েছেন মৌসুমী | |
7 | মৌসুমী থেকে স্থায়ী | |
8 | স্থায়ী থেকে মৌসুমী | |
9 | ক্ষণস্থায়ী স্থায়ী | |
10 | ক্ষণস্থায়ী মৌসুমী |
ট্রানজিশন ক্লাস দ্বারা এলাকার সংক্ষিপ্তকরণ
এই বিভাগে আমরা আবারও জ্যামিতি বহুভুজ টুল ব্যবহার করব একটি অঞ্চল-অফ-আগ্রহ নির্ধারণ করতে। আপনি যদি একটি নতুন অবস্থান বিশ্লেষণ করতে চান, আপনি প্রথমে আপনার আঁকা মূল বহুভুজটি নির্বাচন করতে এবং মুছে ফেলতে চান যাতে আপনি সম্মিলিত এলাকা থেকে ফলাফল না পান। কিভাবে জ্যামিতি পরিবর্তন করতে হয় তার তথ্য থেকে কোড এডিটর ডক্সের জ্যামিতি টুলস বিভাগটি দেখুন।
এই উদাহরণের জন্য আমরা মেকং নদীর ব-দ্বীপের মধ্যে একটি নতুন বহুভুজ আঁকব।

একটি চিত্রের অংশ দ্বারা আচ্ছাদিত এলাকা গণনা করার জন্য, আমরা ট্রানজিশন ইমেজ অবজেক্টে একটি অতিরিক্ত ব্যান্ড যুক্ত করব যা ee.Image.pixelArea পদ্ধতি ব্যবহার করে বর্গ মিটারে প্রতিটি পিক্সেলের আকার সনাক্ত করে।
কোড এডিটর (জাভাস্ক্রিপ্ট)
var area_image_with_transition_class = ee.Image.pixelArea().addBands(transition);
ফলস্বরূপ ইমেজ অবজেক্ট ( area_image_with_transition_class
) হল একটি দুই ব্যান্ড ইমেজ যেখানে প্রথম ব্যান্ডে স্কয়ার মিটারের একক ( ee.Image.pixelArea
code> পদ্ধতি দ্বারা উত্পাদিত) এলাকার তথ্য থাকে এবং দ্বিতীয় ব্যান্ডে ট্রানজিশন ক্লাসের তথ্য থাকে।
তারপরে আমরা ee.Image.reduceRegion
পদ্ধতি এবং একটি গ্রুপড রিডুসার ব্যবহার করে আগ্রহের একটি অঞ্চলের মধ্যে ( roi
) শ্রেণির রূপান্তরগুলিকে সংক্ষিপ্ত করি যা প্রতিটি ট্রানজিশন ক্লাসের মধ্যে ক্ষেত্রফলকে যোগ করার জন্য কাজ করে:
কোড এডিটর (জাভাস্ক্রিপ্ট)
var reduction_results = area_image_with_transition_class.reduceRegion({ reducer: ee.Reducer.sum().group({ groupField: 1, groupName: 'transition_class_value', }), geometry: roi, scale: 30, bestEffort: true, }); print('reduction_results', reduction_results);
কনসোল ট্যাব আউটপুট এখন reduction_results
প্রদর্শন করে। মনে রাখবেন যে এলাকার সারাংশ ডেটা দেখতে আপনাকে গাছটিকে কয়েকটি স্তর প্রসারিত করতে হবে।

যদিও reduction_results
অবজেক্টে প্রতিটি ট্রানজিশন ক্লাসের দ্বারা আচ্ছাদিত এলাকার তথ্য থাকে, এটি বিশেষভাবে পড়া সহজ নয়। পরবর্তী বিভাগে আমরা ফলাফলগুলি দেখতে আরও সহজ করব।
একটি সারাংশ চার্ট তৈরি করা
এই বিভাগে আমরা ফলাফলগুলিকে আরও ভালভাবে সংক্ষিপ্ত করার জন্য একটি চার্ট তৈরি করব। শুরু করার জন্য, আমরা প্রথমে নিম্নরূপ এলাকা সহ ট্রানজিশন ক্লাসের তালিকা বের করি:
কোড এডিটর (জাভাস্ক্রিপ্ট)
var roi_stats = ee.List(reduction_results.get('groups'));
গোষ্ঠীভুক্ত রিডুসারের ফলাফল ( reduction_results
) হল একটি অভিধান যাতে অভিধানের একটি তালিকা রয়েছে। প্রতিটি ট্রানজিশন ক্লাসের জন্য তালিকায় একটি অভিধান রয়েছে। এই বিবৃতিগুলি ee.Dictionary.get পদ্ধতিটি ব্যবহার করে সেই অভিধান থেকে গোষ্ঠীবদ্ধ রিডুসার ফলাফলগুলি বের করে এবং ফলাফলগুলিকে একটি ee.List ডেটা টাইপে দেয়, যাতে আমরা পৃথক অভিধানগুলি অ্যাক্সেস করতে পারি।
কোড এডিটরের চার্টিং ফাংশন ব্যবহার করার জন্য, আমরা একটি ফিচার কালেকশন তৈরি করব যাতে প্রয়োজনীয় তথ্য থাকবে। এটি করার জন্য আমরা প্রথমে দুটি লুকআপ অভিধান এবং দুটি সহায়ক ফাংশন তৈরি করি। যে কোডটি লুকআপ অভিধান তৈরি করে তা "গণনা" বিভাগের শীর্ষে নিম্নরূপ স্থাপন করা যেতে পারে:
কোড এডিটর (জাভাস্ক্রিপ্ট)
////////////////////////////////////////////////////////////// // Calculations ////////////////////////////////////////////////////////////// // Create a dictionary for looking up names of transition classes. var lookup_names = ee.Dictionary.fromLists( ee.List(gsw.get('transition_class_values')).map(numToString), gsw.get('transition_class_names') ); // Create a dictionary for looking up colors of transition classes. var lookup_palette = ee.Dictionary.fromLists( ee.List(gsw.get('transition_class_values')).map(numToString), gsw.get('transition_class_palette') );
lookup_names
অভিধানটি তাদের নামের সাথে ট্রানজিশন শ্রেণীর মানকে সংযুক্ত করে, যখন lookup_palette
অভিধানটি রূপান্তর শ্রেণীর মানকে রঙের সংজ্ঞার সাথে সংযুক্ত করে।
দুটি সহায়ক ফাংশন "হেল্পার ফাংশন" নামে একটি নতুন কোড বিভাগে স্থাপন করা যেতে পারে। কোড এডিটর (জাভাস্ক্রিপ্ট)
//////////////////////////////////////////////////////////////
// Helper functions
//////////////////////////////////////////////////////////////
// Create a feature for a transition class that includes the area covered.
function createFeature(transition_class_stats) {
transition_class_stats = ee.Dictionary(transition_class_stats);
var class_number = transition_class_stats.get('transition_class_value');
var result = {
transition_class_number: class_number,
transition_class_name: lookup_names.get(class_number),
transition_class_palette: lookup_palette.get(class_number),
area_m2: transition_class_stats.get('sum')
};
return ee.Feature(null, result); // Creates a feature without a geometry.
}
// Create a JSON dictionary that defines piechart colors based on the
// transition class palette.
// https://developers.google.com/chart/interactive/docs/gallery/piechart
function createPieChartSliceDictionary(fc) {
return ee.List(fc.aggregate_array("transition_class_palette"))
.map(function(p) { return {'color': p}; }).getInfo();
}
// Convert a number to a string. Used for constructing dictionary key lists
// from computed number objects.
function numToString(num) {
return ee.Number(num).format();
}
createFeature
ফাংশনটি একটি অভিধান (এলাকা এবং জল পরিবর্তনের শ্রেণী সমন্বিত) নেয় এবং চার্টিংয়ের জন্য উপযুক্ত একটি বৈশিষ্ট্য প্রদান করে। createPieChartSliceDictionary
ফাংশন পাই চার্ট দ্বারা প্রত্যাশিত বিন্যাস ব্যবহার করে রূপান্তর শ্রেণীর সাথে মিলিত রঙের একটি তালিকা তৈরি করে।
এর পরে, আমরা তালিকার প্রতিটি অভিধানে createFeature
ফাংশন প্রয়োগ করব ( roi_stats
), ee.List.map ব্যবহার করে তালিকার প্রতিটি উপাদানে সহায়ক ফাংশন প্রয়োগ করব।
কোড এডিটর (জাভাস্ক্রিপ্ট)
var transition_fc = ee.FeatureCollection(roi_stats.map(createFeature)); print('transition_fc', transition_fc);
এখন যেহেতু আমরা চার্টে যে বৈশিষ্ট্যগুলি প্রদর্শন করতে চাই সেগুলি সম্বলিত একটি ফিচার কালেকশন রয়েছে, আমরা একটি চার্ট অবজেক্ট তৈরি করতে পারি এবং এটি কনসোলে প্রিন্ট করতে পারি।
কোড এডিটর (জাভাস্ক্রিপ্ট)
// Add a summary chart. var transition_summary_chart = ui.Chart.feature.byFeature({ features: transition_fc, xProperty: 'transition_class_name', yProperties: ['area_m2', 'transition_class_number'] }) .setChartType('PieChart') .setOptions({ title: 'Summary of transition class areas', slices: createPieChartSliceDictionary(transition_fc), sliceVisibilityThreshold: 0 // Don't group small slices. }); print(transition_summary_chart);
slices
বিকল্পটি পাই চার্টের স্লাইসগুলিতে রঙ করে যাতে তারা ট্রানজিশন ক্লাসের জন্য সংজ্ঞায়িত ডিফল্ট প্যালেট ব্যবহার করে (মানচিত্র কী টেবিলে আগে দেখানো হয়েছে)। sliceVisibilityThreshold
বিকল্পটি ছোট স্লাইসগুলিকে "অন্যান্য" বিভাগে একত্রিত হতে বাধা দেয়। ফলস্বরূপ চার্টটি চিত্র 13-এ দেখানো একটির মতো কিছু হওয়া উচিত।

চূড়ান্ত স্ক্রিপ্ট
এই বিভাগের জন্য সম্পূর্ণ স্ক্রিপ্ট হল:
কোড এডিটর (জাভাস্ক্রিপ্ট)
////////////////////////////////////////////////////////////// // Asset List ////////////////////////////////////////////////////////////// var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater'); var occurrence = gsw.select('occurrence'); var change = gsw.select("change_abs"); var transition = gsw.select('transition'); var roi = ee.Geometry.Polygon( [[[105.531921, 10.412183], [105.652770, 10.285193], [105.949401, 10.520218], [105.809326, 10.666006]]]); ////////////////////////////////////////////////////////////// // Constants ////////////////////////////////////////////////////////////// var VIS_OCCURRENCE = { min: 0, max: 100, palette: ['red', 'blue'] }; var VIS_CHANGE = { min: -50, max: 50, palette: ['red', 'black', 'limegreen'] }; var VIS_WATER_MASK = { palette: ['white', 'black'] }; ////////////////////////////////////////////////////////////// // Helper functions ////////////////////////////////////////////////////////////// // Create a feature for a transition class that includes the area covered. function createFeature(transition_class_stats) { transition_class_stats = ee.Dictionary(transition_class_stats); var class_number = transition_class_stats.get('transition_class_value'); var result = { transition_class_number: class_number, transition_class_name: lookup_names.get(class_number), transition_class_palette: lookup_palette.get(class_number), area_m2: transition_class_stats.get('sum') }; return ee.Feature(null, result); // Creates a feature without a geometry. } // Create a JSON dictionary that defines piechart colors based on the // transition class palette. // https://developers.google.com/chart/interactive/docs/gallery/piechart function createPieChartSliceDictionary(fc) { return ee.List(fc.aggregate_array("transition_class_palette")) .map(function(p) { return {'color': p}; }).getInfo(); } // Convert a number to a string. Used for constructing dictionary key lists // from computed number objects. function numToString(num) { return ee.Number(num).format(); } ////////////////////////////////////////////////////////////// // Calculations ////////////////////////////////////////////////////////////// // Create a dictionary for looking up names of transition classes. var lookup_names = ee.Dictionary.fromLists( ee.List(gsw.get('transition_class_values')).map(numToString), gsw.get('transition_class_names') ); // Create a dictionary for looking up colors of transition classes. var lookup_palette = ee.Dictionary.fromLists( ee.List(gsw.get('transition_class_values')).map(numToString), gsw.get('transition_class_palette') ); // Create a water mask layer, and set the image mask so that non-water areas // are transparent. var water_mask = occurrence.gt(90).mask(1); // Generate a histogram object and print it to the console tab. var histogram = ui.Chart.image.histogram({ image: change, region: roi, scale: 30, minBucketWidth: 10 }); histogram.setOptions({ title: 'Histogram of surface water change intensity.' }); print(histogram); // Summarize transition classes in a region of interest. var area_image_with_transition_class = ee.Image.pixelArea().addBands(transition); var reduction_results = area_image_with_transition_class.reduceRegion({ reducer: ee.Reducer.sum().group({ groupField: 1, groupName: 'transition_class_value', }), geometry: roi, scale: 30, bestEffort: true, }); print('reduction_results', reduction_results); var roi_stats = ee.List(reduction_results.get('groups')); var transition_fc = ee.FeatureCollection(roi_stats.map(createFeature)); print('transition_fc', transition_fc); // Add a summary chart. var transition_summary_chart = ui.Chart.feature.byFeature({ features: transition_fc, xProperty: 'transition_class_name', yProperties: ['area_m2', 'transition_class_number'] }) .setChartType('PieChart') .setOptions({ title: 'Summary of transition class areas', slices: createPieChartSliceDictionary(transition_fc), sliceVisibilityThreshold: 0 // Don't group small slices. }); print(transition_summary_chart); ////////////////////////////////////////////////////////////// // Initialize Map Location ////////////////////////////////////////////////////////////// // Uncomment one of the following statements to center the map on // a particular location. // Map.setCenter(-90.162, 29.8597, 10); // New Orleans, USA // Map.setCenter(-114.9774, 31.9254, 10); // Mouth of the Colorado River, Mexico // Map.setCenter(-111.1871, 37.0963, 11); // Lake Powell, USA // Map.setCenter(149.412, -35.0789, 11); // Lake George, Australia Map.setCenter(105.26, 11.2134, 9); // Mekong River Basin, SouthEast Asia // Map.setCenter(90.6743, 22.7382, 10); // Meghna River, Bangladesh // Map.setCenter(81.2714, 16.5079, 11); // Godavari River Basin Irrigation Project, India // Map.setCenter(14.7035, 52.0985, 12); // River Oder, Germany & Poland // Map.setCenter(-59.1696, -33.8111, 9); // Buenos Aires, Argentina // Map.setCenter(-74.4557, -8.4289, 11); // Ucayali River, Peru ////////////////////////////////////////////////////////////// // Map Layers ////////////////////////////////////////////////////////////// Map.addLayer({ eeObject: water_mask, visParams: VIS_WATER_MASK, name: '90% occurrence water mask', shown: false }); Map.addLayer({ eeObject: occurrence.updateMask(occurrence.divide(100)), name: "Water Occurrence (1984-2015)", visParams: VIS_OCCURRENCE, shown: false }); Map.addLayer({ eeObject: change, visParams: VIS_CHANGE, name: 'occurrence change intensity', shown: false }); Map.addLayer({ eeObject: transition, name: 'Transition classes (1984-2015)', });
এটি গ্লোবাল সারফেস ওয়াটার ডেটাসেটের টিউটোরিয়ালটি শেষ করে। লক্ষ্য করুন যে এই টিউটোরিয়ালটি গ্লোবাল সারফেস ওয়াটার ডেটাসেটে উপলব্ধ মাত্র তিনটি ডেটা স্তর (ঘটনা, পরিবর্তনের তীব্রতা এবং রূপান্তর) নিয়ে কীভাবে কাজ করতে হয় তা দেখানো হয়েছে। আপনি ডেটা ব্যবহারকারী নির্দেশিকা (v2) এ উপলব্ধ অন্যান্য ডেটা স্তরগুলি সম্পর্কে পড়তে পারেন৷
সুখী বিশ্লেষণ!