पानी की उपलब्धता (1984-2015)

GSW डेटासेट में कई डेटा लेयर होती हैं. ये लेयर, सतह पर मौजूद पानी के डेटा को अलग-अलग तरीकों से दिखाती हैं. हम पानी की मौजूदगी की लेयर को विज़ुअलाइज़ करके शुरुआत करेंगे. इससे यह पता चलता है कि मार्च 1984 से अक्टूबर 2015 के बीच, किस जगह पर और कितनी बार पानी मौजूद था.

ट्यूटोरियल के इस सेक्शन में, आपको इनके बारे में जानकारी मिलेगी:

  1. सतह पर मौजूद पानी की जानकारी दिखाने के लिए, मैप लेयर जोड़ें,
  2. मैप लेयर की वैल्यू के बारे में क्वेरी करने का तरीका बताएं,
  3. विज़ुअलाइज़ेशन को बेहतर बनाने के लिए, पसंद के मुताबिक स्टाइल जोड़ें,
  4. थ्रेशोल्ड वैल्यू का इस्तेमाल करके, बाइनरी वॉटर मास्क लेयर बनाएं,
  5. मैप को दुनिया के दिलचस्प हिस्सों पर सेंटर करें और
  6. स्क्रिप्ट को ज़्यादा आसानी से पढ़ने और बनाए रखने के लिए, उसे फिर से लिखने का तरीका दिखाओ.

बेसिक विज़ुअलाइज़ेशन बनाना

सबसे पहले, यहां दिए गए स्टेटमेंट को कोड एडिटर में कॉपी करें:

कोड एडिटर (JavaScript)

var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater');
var occurrence = gsw.select('occurrence');
Map.addLayer(occurrence);

पहले स्टेटमेंट में, GSW डेटासेट के लिए Earth Engine इमेज ऑब्जेक्ट का रेफ़रंस दिया गया है. साथ ही, इसे gsw नाम के वैरिएबल में सेव किया गया है. दूसरे स्टेटमेंट में, GSW डेटासेट की एक लेयर को चुना जाता है और उसे occurrence नाम के वैरिएबल में सेव किया जाता है. तीसरा स्टेटमेंट, Code Editor के इंटरैक्टिव मैप में इमेज जोड़ता है.

कोड एडिटर के "चलाएं" बटन पर क्लिक करें. इसके कुछ सेकंड बाद, आपको तटरेखाओं के साथ-साथ ग्रे रंग वाला मैप दिखेगा. यह मैप, पहले फ़िगर में दिए गए मैप जैसा होगा.

डिफ़ॉल्ट विज़ुअलाइज़ेशन
पहली इमेज. ग्लोबल सर्फ़ेस वॉटर ऑकरेंस डेटा लेयर का डिफ़ॉल्ट विज़ुअलाइज़ेशन.

ज़्यादातर इलाकों में, GSW डेटासेट पारदर्शी दिखता है. ऐसा इसलिए, क्योंकि जिन जगहों पर Landsat की इमेज इकट्ठा नहीं की गई थीं (जैसे, समुद्र वाले इलाके) या जहां 32 सालों में किसी भी ऑब्ज़र्वेशन से पानी का पता नहीं चला था उन्हें मास्क कर दिया गया है.

वैल्यू की जांच करना

पानी की मौजूदगी की लेयर की वैल्यू एक्सप्लोर करने के लिए, हम Code Editor के Inspector टैब का इस्तेमाल करेंगे. सबसे पहले, इंस्पेक्टर टैब पर क्लिक करें. इसके बाद, कोई जगह चुनने के लिए मैप पर क्लिक करें. इंसपेक्टर टैब में, उस जगह पर मौजूद हर लेयर की जानकारी दिखेगी जहां आपने क्लिक किया था.

इंस्पेक्टर टैब
दूसरी इमेज. उदाहरण के लिए, इंस्पेक्टर टैब का आउटपुट.

ऊपर दिए गए उदाहरण में, value नाम की लेयर की वैल्यू 98 है. यूनिट, प्रतिशत पॉइंट हैं. इसलिए, करीब 98% समय तक जगह को पानी से ढका हुआ माना गया. यह वैल्यू, हर महीने के हिसाब से सतह पर पानी की मौजूदगी की औसत वैल्यू होती है. यह वैल्यू, डेटा इस्तेमाल करने वालों के लिए गाइड (v2) में बताए गए तरीके के मुताबिक, मौसम के हिसाब से होने वाले बदलावों के हिसाब से सामान्य की जाती है.

अपने कोड को बेहतर बनाने के लिए रिफ़ैक्टर करना

हमारी स्क्रिप्ट में सिर्फ़ दो स्टेटमेंट हैं. हालांकि, हमारे पास कोड को फिर से फ़ैक्टर करने का विकल्प है, ताकि हमारी फ़ाइनल स्क्रिप्ट को समय के साथ पढ़ना और बनाए रखना आसान हो. फ़िलहाल, Map.addLayer() स्टेटमेंट एक ही आर्ग्युमेंट occurrence पास करता है. यह Earth Engine का इमेज ऑब्जेक्ट है, जिसे हमें मैप पर दिखाना है. हालांकि, Map.addLayer() तरीके में अतिरिक्त तर्क भी पास किए जा सकते हैं. कौन-कौनसे आर्ग्युमेंट उपलब्ध हैं, यह तुरंत देखने के लिए, अपने कर्सर को शुरुआती ब्रैकेट के बाद रखें. इसके बाद, "कोड के सुझाव दिखाएं" के लिए कीबोर्ड शॉर्टकट दबाएं, ताकि addLayer तरीके के लिए सहायता दस्तावेज़ खुल जाए. (कीबोर्ड शॉर्टकट देखने के लिए, मेन्यू में जाकर सहायता -> शॉर्टकट चुनें.)

Map.addLayer के आर्ग्युमेंट
तीसरी इमेज. addLayer तरीके के आर्ग्युमेंट दिखाने वाला स्क्रीनशॉट.

कीबोर्ड शॉर्टकट से पता चलता है कि Map.addLayer में पांच आर्ग्युमेंट पास किए जा सकते हैं: eeObject, visParams, name, shown, और opacity. हमारी मौजूदा स्क्रिप्ट में, हम एक वैरिएबल occurrence पास कर रहे हैं. इसे पहले आर्ग्युमेंट eeObject के तौर पर इंटरप्रेट किया जाता है. वैरिएबल ऑब्जेक्ट और लेयर का नाम बताने वाले अतिरिक्त आर्ग्युमेंट, दोनों को पास करने के लिए, हम कोड को फिर से फ़ैक्टर कर सकते हैं. इसके लिए, "नाम वाले आर्ग्युमेंट" (eeObject और name) का इस्तेमाल किया जा सकता है. इन्हें JSON डेटा स्ट्रक्चर के अंदर से, तरीके में पास किया जाता है. इसे यहां दिखाया गया है:

कोड एडिटर (JavaScript)

Map.addLayer({eeObject: occurrence, name: 'Water Occurrence (1984-2015)'});

कोड को फिर से चलाएं, ताकि यह पक्का किया जा सके कि रिफ़ैक्टरिंग में किए गए बदलावों के बाद भी यह काम कर रहा है. मैप में कोई बदलाव नहीं होना चाहिए.

विज़ुअलाइज़ेशन पैरामीटर जोड़ना

इसके बाद, हम डिफ़ॉल्ट विज़ुअलाइज़ेशन पैरामीटर को बेहतर बनाने पर काम करेंगे. इनकी वजह से, पानी ग्रे रंग का दिख रहा है. एक नया स्टेटमेंट जोड़ें, जो एक वैरिएबल बनाता है VIS_OCCURRENCE और इसे addLayer तरीके के लिए एक अतिरिक्त आर्ग्युमेंट के तौर पर पास करता है.

कोड एडिटर (JavaScript)

var VIS_OCCURRENCE = {
  min: 0,
  max: 100,
  palette: ['red', 'blue']
};

कोड एडिटर (JavaScript)

Map.addLayer({
  eeObject: occurrence.updateMask(occurrence.divide(100)),
  name: 'Water Occurrence (1984-2015)',
  visParams: VIS_OCCURRENCE
});

JSON स्ट्रक्चर VIS_OCCURRENCE में सेव किए गए विज़ुअलाइज़ेशन पैरामीटर से पता चलता है कि 0% की सबसे कम वैल्यू के लिए लाल रंग और 100% की सबसे ज़्यादा वैल्यू के लिए नीले रंग का इस्तेमाल किया जाना चाहिए. .updateMask(occurrence.divide(100)) जोड़ने से, पिक्सल की ओपैसिटी/पारदर्शिता, घटना की वैल्यू के आधार पर सेट हो जाती है.

स्क्रिप्ट को फिर से चलाएं और स्टाइल में किए गए बदलावों के हिसाब से, अपडेट किए गए नतीजे देखें.

सर्फ़ेस वॉटर ऑकरेंस
चौथी इमेज. ब्यूनस आयर्स के पास पराना डेल्टा में पानी की मौजूदगी का स्क्रीनशॉट. इसमें, कम से कम वैल्यू के एंडपॉइंट (0%) के लिए पारदर्शी लाल रंग और ज़्यादा से ज़्यादा वैल्यू के एंडपॉइंट के लिए गहरा नीला रंग इस्तेमाल किया गया है.

पानी वाले इलाके अब नीले रंग में दिख रहे हैं! प्रोग्रेस!

थ्रेशोल्ड लेयर बनाना

पानी की मौजूदगी वाली इमेज में, पानी की मौजूदगी की संभावना के बारे में जानकारी होती है. इसमें 0 से 100% तक की वैल्यू का इस्तेमाल किया जाता है. हालांकि, अक्सर किसी तय प्रतिशत के आधार पर बाइनरी वॉटर लेयर (यानी कि "पानी" बनाम "पानी नहीं") तय करना फ़ायदेमंद होता है. जैसे, थ्रेशोल्ड वैल्यू. हम इस सामान्य बाइनरी लेयर का इस्तेमाल, साफ़ बैकग्राउंड लेयर के तौर पर करेंगे. इस पर अन्य GSW लेयर रखी जा सकती हैं. इस थ्रेशोल्ड लेयर को बनाने के लिए, यहां दिए गए स्टेटमेंट का इस्तेमाल किया जा सकता है. इनमें पानी और पानी के अलावा अन्य चीज़ों को अलग करने के लिए, 90% थ्रेशोल्ड वैल्यू का इस्तेमाल किया गया है.

सबसे पहले, हम वॉटर मास्क के लिए स्टाइलिंग की जानकारी सेव करने के लिए, नया विज़ुअलाइज़ेशन वैरिएबल VIS_WATER_MASK तय करते हैं:

कोड एडिटर (JavaScript)

var VIS_WATER_MASK = {
  palette: ['white', 'black']
};

इसके बाद, हम तुलना ऑपरेटर से ज़्यादा .gt(90) का इस्तेमाल करके, पानी के मास्क की लेयर का हिसाब लगाते हैं. इसके बाद, .unmask() तरीके का इस्तेमाल करके, पहले से मास्क किए गए इलाकों को शून्य पर सेट करते हैं:

कोड एडिटर (JavaScript)

// Create a water mask layer, and set the image mask so that non-water areas
// are opaque.
var water_mask = occurrence.gt(90).unmask(0);

आखिर में, मैप में लेयर जोड़ें. इस लेयर को अन्य सभी लेयर के नीचे रेंडर करने के लिए, Map.addLayer के किसी भी अन्य स्टेटमेंट से पहले यह स्टेटमेंट रखें.

कोड एडिटर (JavaScript)

Map.addLayer({
  eeObject: water_mask,
  visParams: VIS_WATER_MASK,
  name: '90% occurrence water mask'
});
90% वॉटर मास्क
पांचवीं इमेज. बूएनोस आइरेस के पास पराना डेल्टा के लिए, 90% पानी वाले मास्क का स्क्रीनशॉट.

दुनिया की दिलचस्प जगहों पर जाना

पैन और ज़ूम करके दुनिया को एक्सप्लोर करना मज़ेदार होता है, लेकिन दुनिया बहुत बड़ी है और कभी-कभी किसी खास जगह पर सीधे जाना मददगार होता है. यहां कुछ स्टेटमेंट दिए गए हैं. इनमें सतह पर मौजूद पानी के हिसाब से, दिलचस्प जगहों का छोटा सैंपल दिया गया है. एक बार में सिर्फ़ एक स्टेटमेंट से टिप्पणी हटाएं. इससे आपकी स्क्रिप्ट, उस जगह पर चली जाएगी जहां उसे चलाया जाता है.

कोड एडिटर (JavaScript)

// Uncomment one of the following statements to center the map.
// 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

यह दिलचस्प जगहों का सिर्फ़ एक छोटा सा उदाहरण है. आप भी अपनी पसंद के हिसाब से कोई रूटीन जोड़ सकते हैं!

फिर से रीफ़ैक्टर किया जा रहा है...

GSW डेटासेट की अगली लेयर पर जाने से पहले, हम कोड को थोड़ा और बेहतर बनाएंगे. खास तौर पर, हम मिलते-जुलते स्टेटमेंट को एक साथ ग्रुप करेंगे. साथ ही, कुछ ऐसी टिप्पणियां जोड़ेंगे जो हमारे कोड को ऐसे सेक्शन में बांट देंगी: ऐसेट, कॉन्स्टेंट, कैलकुलेशन, मैप को बीच में लाना, और मैप लेयर जोड़ना.

यहां फिर से बनाई गई स्क्रिप्ट दी गई है:

कोड एडिटर (JavaScript)

//////////////////////////////////////////////////////////////
// Asset List
//////////////////////////////////////////////////////////////

var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater');
var occurrence = gsw.select('occurrence');

//////////////////////////////////////////////////////////////
// Constants
//////////////////////////////////////////////////////////////

var VIS_OCCURRENCE = {
  min: 0,
  max: 100,
  palette: ['red', 'blue']
};
var VIS_WATER_MASK = {
  palette: ['white', 'black']
};

//////////////////////////////////////////////////////////////
// Calculations
//////////////////////////////////////////////////////////////

// Create a water mask layer, and set the image mask so that non-water areas
// are opaque.
var water_mask = occurrence.gt(90).unmask(0);

//////////////////////////////////////////////////////////////
// Initialize Map Location
//////////////////////////////////////////////////////////////

// Uncomment one of the following statements to center the map.
// 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
});

अगले सेक्शन में, यह देखा जा सकता है कि समय के साथ पानी की उपलब्धता में क्या बदलाव हुए हैं.