reduceRegion
للحصول على إحصاءات قيم البكسل في منطقة من الـ ee.Image، استخدِم
image.reduceRegion().
يقلّل هذا الإجراء جميع وحدات البكسل في المناطق إلى إحصاء أو تمثيل مضغوط آخر لبيانات البكسل في المنطقة (مثل الرسم البياني التكراري). يتم تمثيل المنطقة على أنّها Geometry، والتي قد تكون مضلّعًا يحتوي على العديد من وحدات البكسل، أو قد تكون نقطة واحدة، وفي هذه الحالة لن يكون هناك سوى بكسل واحد في المنطقة. في كلتا الحالتَين، كما هو موضّح في الشكل 1، يكون الناتج
إحصاءً مستمدًا من وحدات البكسل في المنطقة.
ee.Reducer يتم تطبيقه على صورة
ومنطقةللحصول على مثال على الحصول على إحصاءات البكسل في منطقة من صورة باستخدام
reduceRegion(), يمكنك العثور على متوسط القيم الطيفية
لمركّب Landsat لمدة 5 سنوات ضمن حدود غابة Sierra Nevada
الصنوبرية (الموضّحة في الشكل 2):
// Load input imagery: Landsat 7 5-year composite. var image = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012'); // Load an input region: Sierra Nevada. var region = ee.Feature(ee.FeatureCollection('EPA/Ecoregions/2013/L3') .filter(ee.Filter.eq('us_l3name', 'Sierra Nevada')) .first()); // Reduce the region. The region parameter is the Feature geometry. var meanDictionary = image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region.geometry(), scale: 30, maxPixels: 1e9 }); // The result is a Dictionary. Print it. print(meanDictionary);
لفرض عملية الاحتساب، يكفي طباعة النتيجة، والتي سيعرضها "محرّر التعليمات البرمجية" على شكل Dictionary في وحدة التحكّم. يجب أن تبدو النتيجة على النحو التالي:
B1: 25.406029716816853 B2: 23.971497014238988 B3: 22.91059593763103 B4: 54.83164133293403 B5: 38.07655472573677 B6_VCID_2: 198.93216428012906 B7: 24.063261634961563
يُرجى العِلم أنّه في هذا المثال، يتم تحديد عملية التقليل من خلال توفير reducer
(ee.Reducer.mean()) وgeometry (region.geometry()) و
scale (30 مترًا) وmaxPixels للحد الأقصى لعدد
وحدات البكسل التي سيتم إدخالها في أداة التقليل. يجب دائمًا تحديد مقياس في
reduceRegion() طلبات. ويرجع ذلك إلى أنّه في عمليات المعالجة المعقّدة، التي
قد تتضمّن بيانات من مصادر مختلفة بمقاييس مختلفة، لن يتم تحديد مقياس الناتج
بشكلٍ لا لبس فيه من المدخلات. في هذه الحالة، يتم ضبط المقياس تلقائيًا
على درجة واحدة، ما يؤدي بشكلٍ عام إلى نتائج غير مرضية. يُرجى الاطّلاع على هذه
الصفحة لمزيد من المعلومات حول كيفية تعامل Earth Engine مع المقياس.
هناك طريقتان لضبط المقياس: من خلال تحديد المَعلمة scale أو من خلال تحديد نظام إحداثيات مرجعي وتحويل نظام إحداثيات مرجعي. (يُرجى الاطّلاع على المسرد لمزيد من المعلومات حول أنظمة الإحداثيات المرجعية وعمليات تحويل نظام الإحداثيات المرجعي). على سبيل المثال، عملية تقليل
meanDictionary (أعلاه) تعادل ما يلي:
// As an alternative to specifying scale, specify a CRS and a CRS transform. // Make this array by constructing a 4326 projection at 30 meters, // then copying the bounds of the composite, from composite.projection(). var affine = [0.00026949458523585647, 0, -180, 0, -0.00026949458523585647, 86.0000269494563]; // Perform the reduction, print the result. print(image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region.geometry(), crs: 'EPSG:4326', crsTransform: affine, maxPixels: 1e9 }));
بشكلٍ عام، يكون تحديد المقياس كافيًا ويؤدي إلى رمز أكثر قابلية للقراءة. يحدّد Earth Engine وحدات البكسل التي سيتم إدخالها في أداة التقليل من خلال تحويل المنطقة أولاً إلى صورة نقطية. إذا تم تحديد مقياس بدون نظام إحداثيات مرجعي، يتم تحويل المنطقة إلى صورة نقطية في الإسقاط الأصلي للصورة الذي تم تغيير حجمه إلى درجة الدقة المحدّدة. إذا تم تحديد نظام إحداثيات مرجعي ومقياس، يتم تحويل المنطقة إلى صورة نقطية استنادًا إليهما.
وحدات البكسل في المنطقة
يتم تحديد وحدات البكسل على أنّها في المنطقة (ويتم ترجيحها) وفقًا للقواعد التالية، التي يتم تطبيقها بالمقياس والإسقاط المحدّدَين:
- أدوات التقليل غير المرجّحة (مثل
ee.Reducer.count()أوee.Reducer.mean().unweighted()): يتم تضمين وحدات البكسل إذا كان مركزها في المنطقة وكان قناع الصورة غير صفري. - أدوات التقليل المرجّحة (مثل
ee.Reducer.mean()): يتم تضمين وحدات البكسل إذا كان جزء منها على الأقل (حوالي) 1/256 (~0.4%) في المنطقة وكان قناع الصورة غير صفري؛ ويكون وزنها هو الحد الأدنى لقناع الصورة والجزء (التقريبي) من البكسل الذي تغطيه المنطقة. يتم تمثيل أوزان تقاطع البكسل داخليًا على أنّها أعداد صحيحة مكوّنة من 8 بت (من 0 إلى 255)، ما يؤدي إلى تحديد تغطية جزئية على 256 مستوى منفصلاً.
مطلوب استخدام المَعلمة maxPixels لإنجاح عملية الاحتساب. إذا تم حذف هذه
المَعلمة من المثال، سيتم عرض خطأ يبدو على النحو التالي:
هناك خيارات متعددة لتجنُّب هذه الأخطاء: زيادة maxPixels،
كما في المثال، أو زيادة scale، أو ضبط bestEffort على
"صحيح"، ما يؤدي تلقائيًا إلى احتساب مقياس جديد (أكبر) لا يتجاوز maxPixels. إذا لم تحدّد maxPixels، يتم استخدام القيمة التلقائية.