يهدف دليل "البدء" هذا إلى تقديم طريقة سريعة لبدء البرمجة باستخدام واجهة برمجة التطبيقات Earth Engine JavaScript API. للحصول على نظرة تمهيدية على JavaScript ومزيد من التمارين المتعمّقة باستخدام واجهة برمجة التطبيقات Earth Engine API، يمكنك الاطّلاع على البرامج التعليمية. للاطّلاع على أسلوب الترميز المُقترَح في JavaScript، يمكنك الاطّلاع على دليل أسلوب JavaScript في Google.
يتيح Google Earth Engine للمستخدمين تشغيل الخوارزميات على الصور والمتجهات المرجعية جغرافيًا المخزّنة على بنية Google الأساسية. توفّر Google Earth Engine API مكتبة من الدوالّ التي يمكن تطبيقها على البيانات لعرضها وتحليلها. يحتوي كتالوج البيانات المتاحة للجميع في Earth Engine على كمية كبيرة من الصور ومجموعات البيانات النقطية المتاحة للجميع. يمكن أيضًا إنشاء مواد عرض خاصة في المجلدات الشخصية للمستخدمين.
كيفية استخدام هذه المستندات
تم تصميم مستندات Earth Engine للأشخاص المطلعين على تحليل البيانات
الجغرافية المكانية. يتم تنظيم المستندات بشكل أساسي حسب نوع البيانات. على سبيل المثال، تحتوي
لوحة التنقّل اليمنى على روابط تؤدي إلى أقسام أو صفحات عن أنواع البيانات المهمة
مثل Image
،
ImageCollection
،
Feature
،
FeatureCollection
،
Geometry
،
Reducer
،
Chart
، Join
و
Array
. يوضّح هذا الدليل معلومات أساسية فقط
عن هذه الأنواع لمساعدتك في البدء. تتوفّر أيضًا أقسام لمناقشة
تعلُّم الآلة والخوارزميات المتخصصة أو الخاصة بأجهزة الاستشعار
(مثل خوارزميات Landsat)،
التطبيقات الموجّهة للجمهور وإدارة البيانات (مواد العرض)
وتفاصيل مهمة عن آلية عمل Earth Engine الداخلية.
قبل البدء في أيّ من هذه الإجراءات، اطّلِع على ما يلي.
أداة تعديل الرموز
"محرر الرموز البرمجية" هو بيئة تفاعلية لتطوير تطبيقات Earth Engine (الشكل 1). توفّر اللوحة المركزية محرِّرًا لرمز JavaScript. أعلى المحرِّر، هناك أزرار لحفظ النص البرمجي الحالي ��تشغيله ومحو الخريطة. ينشئ الزر الحصول على الرابط عنوان URL فريدًا للنص البرمجي في شريط العناوين. تحتوي الخريطة في اللوحة السفلية على الطبقات التي أضافها النص البرمجي. في أعلى الصفحة، يتوفّر مربّع بحث لمجموعات البيانات والأماكن. تحتوي اللوحة اليمنى على أمثلة على الرموز البرمجية والنصوص البرمجية المحفوظة، ومرجع قابل للبحث عن واجهة برمجة التطبيقات ومدير مواد العرض للبيانات الخاصة. تحتوي اللوحة اليمنى على أداة فحص لطلب المعلومات من الخريطة، ووحدة تحكّم في النتائج، ومدير للمهام التي تستغرق وقتًا طويلاً. يحتوي زر المساعدة دليل "محرر الرموز" ودليل الحصول على المساعدة.
في أعلى يسار الصفحة على روابط تؤدي إلى هذا الدليل ومراجع أخرى للحصول على المساعدة. يمكنك الاطّلاع على مزيد من المعلومات من خلال
فتح الرمز البرمجي وتشغيله في "أداة تعديل الرموز"
توضِّح الخطوات أدناه كيفية فتح Earth Engine وتنفيذ نص برمجي مخصّص يعرض صورة. للحصول على أفضل النتائج، ننصحك بتثبيت أحدث إصدار من Chrome، وهو متصفّح الويب من Google، والذي يمكن تنزيله هنا.
- افتح "محرر رموز Earth Engine" على الرابط التالي: code.earthengine.google.com.
- انتقِل إلى علامة التبويب النصوص البرمجية في أقصى يمين "أداة تعديل الرموز". ستجد هناك مجموعة من الأمثلة على النصوص البرمجية التي يمكنها الوصول إلى بيانات Earth Engine وعرضها وتحليلها.
- ضمن "مجموعة الصور"، اختَر مثال "الصورة المركبة التي تمّت فلترتها". سيظهر لك
نص في وحدة التحكّم المركزية. اضغط على الزر تشغيل ل ejecutant النص البرمجي. يختار مثال "الصورة المركبة التي تمّت فلترتها" صور Landsat 7 التي تتعامَد مع حدود كولورادو ويوتا أو تقع ضمنها. بعد ذلك، يتم عرض تركيبة حقيقية
للألوان من الصور المحدّدة. تعرّفك العيّنات على الأساليب المستخدَمة بشكل شائع، مثل
filter()
وclip()
وMap.addLayer()
.
هياكل بيانات Earth Engine
إنّ الهيكلَين الأساسيَين للبيانات الجغرافية في Earth Engine هما
Image
و
Feature
اللذان يتوافقان مع نوعَي البيانات المركّبة والمتجهة
على التوالي. تتألّف الصور من نطاقات وقاموس للخصائص.
تتألّف الميزات من Geometry
وقاموس
للسمات. يتم التعامل مع حزمة من الصور (مثل سلسلة زمنية للصور) باستخدام
ImageCollection
. تتم معالجة مجموعة من الميزات
بواسطة FeatureCollection
. تشمل غيرها من
هياكل البيانات الأساسية في Earth Engine Dictionary
،
List
، وArray
، وDate
،
Number
وString
(يمكنك الاطّلاع على مزيد من المعلومات عن أنواع البيانات الأساسية من
هذا الدليل التعليمي). من المهمّ
تذكُّر أنّ هذه جميعها عناصر من جهة الخادم ولا يتمّ التلاعب بها بالطريقة
نفسها التي يتمّ بها التلاعب بعناصر JavaScript من جهة العميل (مزيد من المعلومات).
خوارزميات Earth Engine
هناك عدة طرق لتنفيذ العمليات في واجهة برمجة التطبيقات:
- استدعاء الطرق المرتبط�� بالكائنات
- استدعاء الخوارزميات
- استدعاء دوال معيّنة في "أداة تعديل الرموز"
- تحديد دوال جديدة
تعرض علامة التبويب المستندات في "محرر الرموز البرمجية" طرق كل فئة من فئات واجهة برمجة التطبيقات. على سبيل المثال، تحتوي فئة Image
على طريقة add()
:
محرِّر الرموز البرمجية (JavaScript)
var image3 = image1.add(image2);
تضيف هذه الطريقة نطاقات image2
إلى نطاقات image1
.
تحتوي فئة ee.Algorithms
على قائمة بالخوارزميات المتاحة حاليًا
للمعالجة المتخصصة أو الخاصة بالمجال. على سبيل المثال، لإنشاء
طبقات طبوغرافية من نموذج رقمي للإرتفاع (DEM) مُدخل:
محرِّر الرموز البرمجية (JavaScript)
var terrainImage = ee.Algorithms.Terrain(dem);
تشمل الدوالّ الخاصة بأداة "محرر الرموز" الطريقتَين Map
وExport
اللتين تتحكّمان في كيفية إضافة الطبقات إلى لوحة الخريطة أو تصديرها إلى Google Drive،
على التوالي. يمكن أيضًا إنشاء الدوالّ في JavaScript باستخدام
محرِّر الرموز البرمجية (JavaScript)
var myFunction = function(args) { // do something return something; };
كما هو موضّح في قسم الربط، الدوالّ التي يحدّدها المستخدمون مفيدة لإنشاء وظائف مخصّصة أو تعديل عناصر مجموعة باستخدام:
محرِّر الرموز البرمجية (JavaScript)
var collection2 = collection1.map(aFunction);
توضِّح الأقسام التالية هذه المفاهيم لحالات استخدام بسيطة مختلفة.
"مرحبًا بك في العالم" JavaScript
إنّ طباعة المعلومات في وحدة التحكّم هي مهمة أساسية للحصول على معلومات عن عنصر معيّن، أو عرض النتيجة الرقمية لعملية حسابية، أو عرض البيانات الوصفية للعنصر، أو المساعدة في تصحيح الأخطاء. مثال "مرحبًا بك في العالم" الشهير في "محرِّر الرموز" هو:
محرِّر الرموز البرمجية (JavaScript)
print('Hello world!');
انسخ هذا السطر في أداة تعديل الرموز وانقر على تشغيل. يُرجى ملاحظة أنّه يتم عرض النتيجة في علامة التبويب وحدة التحكّم على يسار "محرر الرموز البرمجية". للحصول على مثال أكثر صلة بالاستشعار عن بُعد، يُرجى الاطّلاع على ما يلي لطباعة البيانات الوصفية لصورة Landsat 8:
محرِّر الرموز البرمجية (JavaScript)
print(ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'));
تحقّق بعناية من الإخراج في وحدة التحكّم للاطّلاع على البيانات الوصفية المتاحة لصور Landsat.
إضافة بيانات إلى الخريطة
بالإضافة إلى طباعة المعلومات في وحدة التحكّم، فإنّ إضافة البيانات إلى Map
هي طريقة عرض البيانات الجغرافية. استخدِم Map.addLayer()
لإجراء ذلك. في
الم��ال التالي، يتمّ إنشاء مثيل لعنصر Image
(يتمّ تناول كيفية العثور على هذه الصور
في وقت لاحق) باستخدام ee.Image()
، ويتمّ إضافته إلى الخريطة باستخدام
Map.addLayer()
ويتمّ وضع الخريطة في منتصف الصورة:
محرِّر الرموز البرمجية (JavaScript)
// Load an image. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); // Center the map on the image. Map.centerObject(image, 9); // Display the image. Map.addLayer(image);
المَعلمة الثانية لسمة Map.centerObject()
هي مستوى التكبير أو التصغير، حيث تشير الأرقام
الأعلى إلى مقياس أكبر (تكبير أكثر). يتم وصف مَعلمات دوالّ Map
بالتفصيل في مرجع واجهة برمجة التطبيقات الذي يمكن الوصول إليه من علامة تبويب
مستندات Google. إذا لم يكن مظهر الصورة مُرضٍ، يمكنك ضبط
مَعلمات العرض باستخدام وسيطة إضافية لـ Map.addLayer()
. على سبيل المثال:
محرِّر الرموز البرمجية (JavaScript)
// Load the image from the archive. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); // Define visualization parameters in an object literal. var vizParams = {bands: ['B5', 'B4', 'B3'], min: 0.02, max: 0.4, gamma: 1.3}; // Center the map on the image and display. Map.centerObject(image, 9); Map.addLayer(image, vizParams, 'Landsat 8 false color');
يُرجى ملاحظة أنّ مَعلمات العرض المرئي يتم تحديدها من خلال عنصر حرفي يتضمن قائمة بالشرائح المطلوب عرضها والحد الأدنى والحد الأقصى لقيمة الانعكاس وقيمة جاما. (اطّلِع على مزيد من المعلومات عن نطاقات Landsat هنا. يمكنك الاطّلاع على مزيد من المعلومات عن ميزة "عرض الصور" هنا.
استخدِم Map.addLayer()
لإضافة ميزات ومجموعات ميزات إلى الخريطة. على سبيل
المثال:
محرِّر الرموز البرمجية (JavaScript)
var counties = ee.FeatureCollection('TIGER/2018/Counties'); Map.addLayer(counties, {}, 'counties');
العثور على الصور ومجموعات الصور ومجموعات العناصر
يمكن العثور على الصور ومجموعات الصور ومجموعات العناصر من خلال البحث في كتالوج بيانات Earth Engine. على سبيل المثال، يؤدي إدخال "Landsat 8" في حقل البحث إلى عرض قائمة بمجموعات البيانات المركّبة. (يمكنك الاطّلاع على القائمة الكاملة لمجموعات بيانات Earth Engine في كتالوج بيانات Earth Engine). انقر على اسم مجموعة البيانات للحصول على وصف موجز ومعلومات عن مدى توفّرها في الفترات الزمنية المختلفة ومقدّم البيانات ورقم تعريف المجموعة. انقر على الزر استيراد لإنشاء قسم عمليات الاستيراد تلقائيًا في أعلى نصك البرمجي باستخدام متغيّر لهذه المجموعة.
بدلاً من ذلك، يمكنك نسخ رقم تعريف المجموعة ولصقه في الرمز. على سبيل المثال، اختَر نتيجة TOA من المستوى 1 لبحث "Landsat 8" وانسخ المعرّف على النحو التالي:
محرِّر الرموز البرمجية (JavaScript)
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
بما أنّ هذه مجموعة من العديد من الصور التي تغطي سطح الأرض، فإنّ العثور على صورة فردية في المجموعة يتطلّب الفلترة لتضييق نطاق البحث. بدلاً من ذلك، يمكن تقليل مجموعة الصور إلى صورة واحدة باستخدام تقنيات تركيب الصور وإنشاء الصور المركّبة. يمكنك الاطّلاع على مزيد من المعلومات عن الفلترة والتركيب (راجِع التقليل) في الأقسام التالية.
تتوفّر مجموعات العناصر أيضًا من خلال "كتالوج البيانات". وتكون هذه الحدود أصغر حجمًا مقارنةً بمجموعات الصور، ولكن يمكنك العثور على حدود دولية وحدود مناطق إحصاءات السكان وحدود مستجمعات المياه وحدود المناطق المحمية، على سبيل المثال لا الحصر. يمكنك الاطّلاع على مزيد من المعلومات حول استيراد مجموعات بياناتك المكوّنة من رسومات هنا.
الفلترة والترتيب
غالبًا ما يكون من الضروري فلترة مجموعة حسب المساحة و/أو الوقت لتقليل
عدد النتائج. على سبيل المثال، لنفترض أنّك تريد ترتيب مجموعة مناظر Landsat 8
للعثور على منظر خالٍ من السحب في مدينة سان فرانسيسكو. أولاً، من الضروري تحديد
منطقة الاهتمام. وغالبًا ما تكون النقطة مفيدة لذلك. فعِّل علامة التبويب
المدقق على يسار "محرر الرموز" وانقر بالقرب من
مركز المنطقة التي تهمّك، وانسخ الإحداثيات من علامة التبويب
المدقق، ثمّ أنشئ Point
باستخدام:
محرِّر الرموز البرمجية (JavaScript)
var point = ee.Geometry.Point(-122.262, 37.8719);
إنشاء تاريخَي البدء والانتهاء:
محرِّر الرموز البرمجية (JavaScript)
var start = ee.Date('2014-06-01'); var finish = ee.Date('2014-10-01');
فلتِر مجموعة Landsat 8 باستخدام النقطة والتواريخ، ثمّ رتِّب باستخدام سمة datametaph (تم اكتشافها أثناء فحص البيانات الوصفية لمشهد Landsat 8):
محرِّر الرموز البرمجية (JavaScript)
var filteredCollection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(point) .filterDate(start, finish) .sort('CLOUD_COVER', true);
يمكن طباعة هذه المجموعة وفحصها بأمان. (إذا كانت المجموعة تحتوي على عددٍ كبير جدًا من
الصور، ستستغرق طباعتها وقتًا طويلاً جدًا أو ستنتهي مهلة طباعتها أو ستظهر رسالة خطأ). يُرجى ملاحظة أنّ
الصور في المجموعة هي List
يتم تخزينها في سمة "العناصر" الخاصة
بـ ImageCollection
. يمكن نسخ معرّف أي صورة في المجموعة
إلى أداة إنشاء Image
كما هو موضّح أعلاه. بدلاً من ذلك، يمكنك الحصول على
الصورة الأولى (أدنى تغطية للغيوم):
محرِّر الرموز البرمجية (JavaScript)
var first = filteredCollection.first();
يمكنك الوصول إلى وظيفة الفلترة الكاملة في Earth Engine باستخدام filter()
مع ee.Filter
كوسيطة. (إنّ الطريقتَين filterBounds()
و
filterDate()
المستخدَمتَين أعلاه هما اختصاران). على سبيل المثال، يؤدي الإجراء التالي
إلى إنشاء Filter
واستخدامه لفلترة FeatureCollection
و
عرض النتيجة:
محرِّر الرموز البرمجية (JavaScript)
// Load a feature collection. var featureCollection = ee.FeatureCollection('TIGER/2016/States'); // Filter the collection. var filteredFC = featureCollection.filter(ee.Filter.eq('NAME', 'California')); // Display the collection. Map.setCenter(-119.604, 37.798, 6); Map.addLayer(filteredFC, {}, 'California');
العمليات الحسابية في النطاق
تنفيذ عمليات حسابية على الصور باستخدام طرق Image
وقد يشمل ذلك
عمليات إعادة دمج النطاقات (المؤشرات الطيفية) أو العمليات الحسابية
مثل الضرب في عدد ثابت. على سبيل المثال، يمكنك احتساب الفرق
بين صور "مؤشر الاختلاف النباتي القياسي" (NDVI) التي تفصل بينها 20 عامًا:
محرِّر الرموز البرمجية (JavaScript)
// This function gets NDVI from Landsat 5 imagery. var getNDVI = function(image) { return image.normalizedDifference(['B4', 'B3']); }; // Load two Landsat 5 images, 20 years apart. var image1 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_19900604'); var image2 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_20100611'); // Compute NDVI from the scenes. var ndvi1 = getNDVI(image1); var ndvi2 = getNDVI(image2); // Compute the difference in NDVI. var ndviDifference = ndvi2.subtract(ndvi1);
يُرجى ملاحظة استخدام function
محدّد من المستخدِم في هذا المثال. مزيد من المعلومات عن الدوالّ في القسم التالي
الربط (ما يجب فعله بدلاً من حلقة for)
استخدِم map()
للتنقّل في العناصر في مجموعة. (حلقات For ليست
الطريقة الصحيحة لإجراء ذلك في Earth Engine ويجب تجنُّبها). يمكن تطبيق الدالة map()
على ImageCollection
أو
FeatureCollection
أو List
، وهي تقبل function
كوسيطة لها. وسيطة الدالة هي عنصر من المجموعة التي يتم ربطها بها. ويُعدّ ذلك مفيدًا لتعديل كل عنصر من عناصر المجموعة بالطريقة
نفسها، على سبيل المثال الإضافة. على سبيل المثال، تضيف التعليمة البرمجية التالية نطاق NDVI إلى كل
صورة في ImageCollection
:
محرِّر الرموز البرمجية (JavaScript)
// This function gets NDVI from Landsat 8 imagery. var addNDVI = function(image) { return image.addBands(image.normalizedDifference(['B5', 'B4'])); }; // Load the Landsat 8 TOA data, filter by location and date. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(ee.Geometry.Point(-122.262, 37.8719)) .filterDate('2014-06-01', '2014-10-01'); // Map the function over the collection. var ndviCollection = collection.map(addNDVI);
ومن المهام الشائعة الأخرى إضافة سمة جديدة (أو "سمة" أو "حقل") إلى العناصر في
FeatureCollection
. في المثال التالي، السمة الجديدة هي
عملية حسابية تتضمّن سمتَين حاليتَين:
محرِّر الرموز البرمجية (JavaScript)
// This function creates a new property that is the sum of two existing properties. var addField = function(feature) { var sum = ee.Number(feature.get('property1')).add(feature.get('property2')); return feature.set({'sum': sum}); }; // Create a FeatureCollection from a list of Features. var features = ee.FeatureCollection([ ee.Feature(ee.Geometry.Point(-122.4536, 37.7403), {property1: 100, property2: 100}), ee.Feature(ee.Geometry.Point(-118.2294, 34.039), {property1: 200, property2: 300}), ]); // Map the function over the collection. var featureCollection = features.map(addField); // Print a selected property of one Feature. print(featureCollection.first().get('sum')); // Print the entire FeatureCollection. print(featureCollection);
يُرجى العِلم أنّ التحويل إلى ee.Number
مطلوب لكي تتم التعرّف على قيمة السمة
كعدد من أجل استخدام طريقة add()
). يمكن تغيير نوع
المجموعة من خلال map()
. على سبيل المثال:
محرِّر الرموز البرمجية (JavaScript)
// This function returns the image centroid as a new Feature. var getGeom = function(image) { return ee.Feature(image.geometry().centroid(), {foo: 1}); }; // Load a Landsat 8 TOA collection. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(ee.Geometry.Point(-122.262, 37.8719)) .filterDate('2014-06-01', '2014-10-01'); // Map the function over the ImageCollection. var featureCollection = ee.FeatureCollection(collection.map(getGeom)); // Print the collection. print(featureCollection);
يُرجى ملاحظة السمة المُضافة (foo
) لكلّ عنصر تم إنشاؤه من
مركز الصورة. في السطر الأخير، تجعل عملية التحويل المجموعة الناتجة معروفة على أنّها
FeatureCollection
.
في انخفاض
إنّ التقليل هو طريقة تجميع البيانات بمرور الوقت والمساحة والشرائح والصفائف وغيرها من بنى
البيانات في Earth Engine. تتوفّر طرق مختلفة لهذا الغرض في واجهة برمجة التطبيقات. على سبيل المثال، لإنشاء صورة مركبة من ImageCollection
، استخدِم reduce()
لتقليل عدد الصور في المجموعة إلى صورة واحدة. من الأمثلة البسيطة على ذلك إنشاء
الصورة المركبة المتوسطة من المشاهد الخمسة الأقل سحابة في مجموعة Landsat 8 ال��ي ت�� ت��د��د��ا
س��بقًا:
محرِّر الرموز البرمجية (JavaScript)
// Load a Landsat 8 TOA collection. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') // Filter by date and location. .filterBounds(ee.Geometry.Point(-122.262, 37.8719)) .filterDate('2014-01-01', '2014-12-31') // Sort by increasing cloudiness. .sort('CLOUD_COVER'); // Compute the median of each pixel for each band of the 5 least cloudy scenes. var median = collection.limit(5).reduce(ee.Reducer.median());
وتعدّ عملية التقليل أيضًا طريقة للحصول على إحصاءات عن صورة في المناطق التي يحدّدها
Feature
أو FeatureCollection
. لنفترض أنّ المهمة هي احتساب
متوسط قيم البكسل ضمن منطقة ذات أهمية. استخدِم reduceRegion()
لهذا الغرض. على سبيل المثال:
محرِّر الرموز البرمجية (JavaScript)
// Load and display a Landsat TOA image. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); Map.addLayer(image, {bands: ['B4', 'B3', 'B2'], max: 0.3}); // Create an arbitrary rectangle as a region and display it. var region = ee.Geometry.Rectangle(-122.2806, 37.1209, -122.0554, 37.2413); Map.addLayer(region); // Get a dictionary of means in the region. Keys are bandnames. var mean = image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region, scale: 30 });
اطّلِع على مزيد من المعلومات عن وظائف التقليل من مستند وظائف التقليل.
إخفاء
يحتوي كل بكسل في ee.Image
على قيمة وقناع يتراوح من
0 (بدون بيانات) إلى 1. يتم التعامل مع البكسلات التي تم حجبها (التي يكون فيها mask==0) على أنّها لا تحتوي على بيانات. يكون للّقطات
التي يكون فيها القناع 0 < mask ≤ 1 قيمة، ولكن يتمّ احتسابها حسب القناع لإجراء العمليات الحسابية
الرقمية.
يمكنك جعل البكسلات شفافة أو استبعادها من التحليل باستخدام أقنعة. يتم حجب البكسلات عندما تكون قيمة القناع صفرًا. في ما يلي مثال آخر على رصد الاختلافات بين الصور: استخدِم قناعًا لعرض المناطق التي زاد فيها مؤشر NDVI وتلك التي انخفض فيها على مدار فاصل الاختلاف:
// This function gets NDVI from Landsat 5 imagery. var getNDVI = function(image) { return image.normalizedDifference(['B4', 'B3']); }; // Load two Landsat 5 images, 20 years apart. var image1 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_19900604'); var image2 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_20100611'); // Compute NDVI from the scenes. var ndvi1 = getNDVI(image1); var ndvi2 = getNDVI(image2); // Compute the difference in NDVI. var ndviDifference = ndvi2.subtract(ndvi1); // Load the land mask from the SRTM DEM. var landMask = ee.Image('CGIAR/SRTM90_V4').mask(); // Update the NDVI difference mask with the land mask. var maskedDifference = ndviDifference.updateMask(landMask); // Display the masked result. var vizParams = {min: -0.5, max: 0.5, palette: ['FF0000', 'FFFFFF', '0000FF']}; Map.setCenter(-122.2531, 37.6295, 9); Map.addLayer(maskedDifference, vizParams, 'NDVI difference');
في هذا المثال، يُرجى ملاحظة أنّ قناع فرق مؤشر NDVI يتم تعديله بواسطة قناع الأراضي
باستخدام updateMask()
. يؤدي ذلك إلى ضبط قناع وحدات البكسل التي تمثّل الفرق في مؤشر NDVI على
قناع اليابسة حيثما يكون قناع الفرق في مؤشر NDVI غير صفري.
يُعدّ حجب البيانات مفيدًا أيضًا لاستبعاد البيانات من التحليل. راجِع المثال التالي على
reduceRegion()
من قسم "الحدّ من
المحتوى". لنفترض أنّ المهمة هي احتساب متوسط مؤشر NDVI الموسمي لمقاطعة سانتا كلارا في كاليفورنيا،
باستثناء وحدات البكسل التي تُظهر الغيوم. يوضّح المثال التالي مفاهيم متعدّدة:
الفلترة ووضع الخرائط والحدّ من المحتوى واستخدام قناع السحب:
محرِّر الرموز البرمجية (JavaScript)
// This function gets NDVI from a Landsat 8 image. var addNDVI = function(image) { return image.addBands(image.normalizedDifference(['B5', 'B4'])); }; // This function masks cloudy pixels. var cloudMask = function(image) { var clouds = ee.Algorithms.Landsat.simpleCloudScore(image).select(['cloud']); return image.updateMask(clouds.lt(10)); }; // Load a Landsat collection, map the NDVI and cloud masking functions over it. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(ee.Geometry.Point([-122.262, 37.8719])) .filterDate('2014-03-01', '2014-05-31') .map(addNDVI) .map(cloudMask); // Reduce the collection to the mean of each pixel and display. var meanImage = collection.reduce(ee.Reducer.mean()); var vizParams = {bands: ['B5_mean', 'B4_mean', 'B3_mean'], min: 0.02, max: 0.4}; Map.addLayer(meanImage, vizParams, 'mean'); // Load a region in which to compute the mean and display it. var counties = ee.FeatureCollection('TIGER/2018/Counties'); var santaClara = ee.Feature(counties.filter(ee.Filter.eq('NAME', 'Santa Clara')).first()); Map.addLayer(santaClara); // Get the mean of NDVI in the region. var mean = meanImage.select(['nd_mean']).reduceRegion({ reducer: ee.Reducer.mean(), geometry: santaClara.geometry(), scale: 30 }); // Print mean NDVI for the region. mean.get('nd_mean').evaluate(function(val){ print('Santa Clara spring mean NDVI:', val); });