عدد مرات حدوث الفيضانات (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);

تشير العبارة الأولى إلى عنصر الصورة في Earth Engine لمجموعة بيانات GSW، وتخزّنه في متغيّر باسم gsw. تختار العبارة الثانية طبقة واحدة من مجموعة بيانات GSW، وتخزّنها في متغيّر باسم occurrence. تضيف العبارة الثالثة صورة التكرار إلى الخريطة التفاعلية في "أداة تعديل الرموز".

انقر على زر "تشغيل" (Run) في "أداة تعديل الرموز"، وبعد بضع ثوانٍ، من المفترض أن تظهر لك خريطة باللون الرمادي على طول السواحل، كما هو موضّح في الشكل 1.

التصور التلقائي
الشكل 1: العرض التلقائي لطبقة بيانات حدوث المياه السطحية العالمية

في معظم المناطق، تظهر مجموعة بيانات GSW شفافة، لأنّ المواقع الجغرافية التي لم يتم جمع صور Landsat لها (أي مناطق المحيطات) أو التي لم يتم رصد المياه فيها من خلال أي ملاحظات خلال الـ 32 عامًا محجوبة.

فحص القيم

لاستكشاف قيم طبقة ظهور المياه، سنستخدم علامة التبويب "المفتّش" في "أداة تعديل الرموز". انقر أولاً على علامة التبويب "المفتّش"، ثم انقر على الخريطة لاختيار موقع جغرافي. ستعرض علامة التبويب "المفتّش" معلومات عن كل طبقة من الطبقات التي تظهر في المكان الذي نقرت عليه.

علامة التبويب "أداة الفحص"
الشكل 2: مثال على ناتج علامة التبويب "أداة الفحص"

في المثال أعلاه، قيمة الطبقة المسماة value هي 98. الوحدات هي نقاط مئوية، لذا تم تصنيف الموقع الجغرافي على أنّه مغمور بالمياه في% 98 من الوقت تقريبًا. القيمة هي متوسط كل قيمة من قيم حدوث المياه السطحية الشهرية، والتي يتم تسويتها مقابل التباين الموسمي، كما هو موضح في دليل مستخدمي البيانات (الإصدار 2) .

إعادة التصميم لتحسين الرمز البرمجي

يحتوي النص البرمجي على عبارتين فقط، ولكن لدينا بالفعل فرصة لإعادة تصميم الرمز بحيث يكون النص البرمجي النهائي أسهل في القراءة والصيانة بمرور الوقت. في الوقت الحالي، تمرّر عبارة Map.addLayer() وسيطة واحدة occurrence، وهي عنصر صورة Earth Engine الذي نريد عرضه على الخريطة. ومع ذلك، تسمح طريقة Map.addLayer() أيضًا بتمرير وسيطات إضافية إليها. للاطّلاع بسرعة على الوسيطات المتاحة، ضَع المؤشر بعد القوس المفتوح واضغط على اختصار لوحة المفاتيح "عرض اقتراحات الرموز" لإظهار مستند المساعدة الخاص بالطريقة addLayer. (يمكن عرض اختصارات لوحة المفاتيح من خلال اختيار القائمة "مساعدة" -> "الاختصارات".)

وسيطات Map.addLayer
الشكل 3: لقطة شاشة تعرض وسيطات طريقة 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)) إلى ضبط عتامة/شفافية وحدات البكسل استنادًا إلى قيمة التكرار.

شغِّل النص البرمجي مرة أخرى، واطّلِع على النتائج المعدَّلة من تغييرات التنسيق.

Surface Water Occurrence
الشكل 4. لقطة شاشة لظهور المياه في دلتا بارانا بالقرب من بوينس آيرس، باستخدام لون أحمر شفاف لنقطة النهاية ذات القيمة الدنيا% 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
الشكل 5: لقطة شاشة لقناع مائي بنسبة% 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
});

في القسم التالي، يمكنك استكشاف كيفية تغيّر معدّل حدوث المياه بمرور الوقت.