पानी की ट्रांज़िशन लेयर, पानी की मौजूदगी की तीन क्लास (पानी नहीं है, मौसमी पानी, और स्थायी पानी) के बीच हुए बदलावों को कैप्चर करती है. साथ ही, यह कुछ समय के लिए मौजूद रहने वाले पानी (कुछ समय के लिए मौजूद रहने वाला स्थायी पानी और कुछ समय के लिए मौजूद रहने वाला मौसमी पानी) की दो अन्य क्लास को भी कैप्चर करती है.
ट्यूटोरियल के इस सेक्शन में, आपको इनके बारे में जानकारी मिलेगी:
- पानी के बदलाव को विज़ुअलाइज़ करने के लिए, मैप लेयर जोड़ें,
- किसी खास क्षेत्र में मौजूद हर ट्रांज़िशन क्लास के एरिया को जोड़ने के लिए, ग्रुप किया गया रिड्यूसर बनाएं.
- एक ऐसा चार्ट बनाएं जिसमें ट्रांज़िशन क्लास के हिसाब से, इलाके की खास जानकारी दी गई हो.
बुनियादी विज़ुअलाइज़ेशन
स्क्रिप्ट के ऐसेट की सूची वाले सेक्शन में, यह स्टेटमेंट जोड़ें. इससे transition
नाम का सिंगल बैंड इमेज ऑब्जेक्ट बनता है:
कोड एडिटर (JavaScript)
var transition = gsw.select('transition');
GSW इमेज में, ट्रांज़िशन क्लास के नंबर और नामों के बारे में मेटाडेटा होता है. साथ ही, ट्रांज़िशन क्लास को स्टाइल करने के लिए डिफ़ॉल्ट पैलेट होता है. मैप में ट्रांज़िशन लेयर जोड़ने पर, ये विज़ुअलाइज़ेशन पैरामीटर अपने-आप इस्तेमाल होंगे.
अपनी स्क्रिप्ट के मैप लेयर सेक्शन में सबसे नीचे, यह स्टेटमेंट जोड़ें. इससे एक नई मैप लेयर जुड़ जाएगी, जो ट्रांज़िशन क्लास दिखाएगी:
कोड एडिटर (JavaScript)
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 तरीके का इस्तेमाल करके, हर पिक्सल के साइज़ की पहचान करेगा. यह साइज़ वर्ग मीटर में होगा.
कोड एडिटर (JavaScript)
var area_image_with_transition_class = ee.Image.pixelArea().addBands(transition);
इससे मिलने वाला इमेज ऑब्जेक्ट (area_image_with_transition_class
) दो बैंड वाली इमेज होती है. इसमें पहले बैंड में, वर्ग मीटर की इकाइयों में क्षेत्र की जानकारी होती है. यह जानकारी,
ee.Image.pixelArea
code>
तरीके से जनरेट होती है. वहीं, दूसरे बैंड में ट्रांज़िशन क्लास की जानकारी होती है.
इसके बाद, हम
ee.Image.reduceRegion
तरीके और
ग्रुप किए गए रिड्यूसर
का इस्तेमाल करके, दिलचस्पी वाले क्षेत्र (roi
) में क्लास ट्रांज़िशन की खास जानकारी देते हैं. ग्रुप किए गए रिड्यूसर का इस्तेमाल, हर ट्रांज़िशन क्लास में मौजूद क्षेत्र को जोड़ने के लिए किया जाता है:
कोड एडिटर (JavaScript)
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
ऑब्जेक्ट में, हर ट्रांज़िशन क्लास के तहत आने वाले इलाके की जानकारी होती है. हालांकि, इसे पढ़ना आसान नहीं होता. अगले सेक्शन में, हम नतीजों को देखना आसान बनाएंगे.
खास जानकारी देने वाला चार्ट बनाना
इस सेक्शन में, हम नतीजों को बेहतर तरीके से दिखाने के लिए एक चार्ट बनाएंगे. शुरू करने के लिए, हम सबसे पहले ट्रांज़िशन क्लास की सूची निकालते हैं. इसमें ये क्षेत्र शामिल होते हैं:
कोड एडिटर (JavaScript)
var roi_stats = ee.List(reduction_results.get('groups'));
ग्रुप किए गए रिड्यूसर (reduction_results
) का नतीजा एक डिक्शनरी होती है. इसमें डिक्शनरी की सूची होती है.
सूची में, हर ट्रांज़िशन क्लास के लिए एक डिक्शनरी होती है.
इन स्टेटमेंट में,
ee.Dictionary.get
तरीके का इस्तेमाल किया जाता है. इससे, ग्रुप किए गए रिड्यूसर के नतीजों को उस डिक्शनरी से निकाला जा सकता है. साथ ही, नतीजों को ee.List डेटा टाइप में बदला जा सकता है, ताकि हम अलग-अलग डिक्शनरी को ऐक्सेस कर सकें.
कोड एडिटर के चार्टिंग फ़ंक्शन का इस्तेमाल करने के लिए, हम एक FeatureCollection बनाएंगे. इसमें ज़रूरी जानकारी शामिल होगी. इसके लिए, हम सबसे पहले दो लुकअप डिक्शनरी और दो हेल्पर फ़ंक्शन बनाते हैं. लुकअप डिक्शनरी बनाने वाले कोड को "कैलकुलेशन" सेक्शन में सबसे ऊपर रखा जा सकता है. जैसे:
कोड एडिटर (JavaScript)
////////////////////////////////////////////////////////////// // 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
डिक्शनरी, ट्रांज़िशन क्लास की वैल्यू को रंग की परिभाषाओं से जोड़ती है.
दोनों हेल्पर फ़ंक्शन को "हेल्पर फ़ंक्शन" नाम के नए कोड सेक्शन में रखा जा सकता है.
कोड एडिटर (JavaScript)
////////////////////////////////////////////////////////////// // 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
फ़ंक्शन, ट्रांज़िशन क्लास के हिसाब से रंगों की एक सूची बनाता है. इसके लिए, पाई चार्ट के हिसाब से फ़ॉर्मैट का इस्तेमाल किया जाता है.
इसके बाद, हम सूची (roi_stats
) में मौजूद हर डिक्शनरी पर createFeature
फ़ंक्शन लागू करेंगे. इसके लिए, हम ee.List.map का इस्तेमाल करेंगे, ताकि सूची के हर एलिमेंट पर हेल्पर फ़ंक्शन लागू किया जा सके.
कोड एडिटर (JavaScript)
var transition_fc = ee.FeatureCollection(roi_stats.map(createFeature)); print('transition_fc', transition_fc);
अब हमारे पास एक FeatureCollection है, जिसमें वे एट्रिब्यूट शामिल हैं जिन्हें हमें चार्ट पर दिखाना है. इसलिए, हम एक चार्ट ऑब्जेक्ट बना सकते हैं और उसे कंसोल पर प्रिंट कर सकते हैं.
कोड एडिटर (JavaScript)
// 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वीं इमेज में दिखाए गए चार्ट जैसा होना चाहिए.

फ़ाइनल स्क्रिप्ट
इस सेक्शन की पूरी स्क्रिप्ट यह है:
कोड एडिटर (JavaScript)
////////////////////////////////////////////////////////////// // 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) में उपलब्ध अन्य डेटा लेयर के बारे में पढ़ा जा सकता है.
विश्लेषण करते रहें!