पानी की उपलब्धता (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 नाम के वैरिएबल में सेव किया जाता है. तीसरे स्टेटमेंट से, कोड एडिटर के इंटरैक्टिव मैप में, मौजूदगी की इमेज जोड़ी जाती है.

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

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

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

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

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

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

ऊपर दिए गए उदाहरण में, 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

यह दिलचस्प जगहों का सिर्फ़ एक छोटा सा सैंपल है. अपनी पसंद के मुताबिक, इसमें बदलाव करें!

फिर से रीफ़ैक्टरिंग...

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

यहां रीफ़ैक्टर की गई फ़ाइनल स्क्रिप्ट दी गई है:

कोड एडिटर (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
});

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