بیایید با محاسبه لازم برای ایجاد باندی شروع کنیم که پیکسلهایی را نشان میدهد که در آنها دادههای Hansen et al. هم ازدست دادن و هم بهدست آوردن را نشان میدهد.
مجموعه داده Hansen et al. دارای باندی است که پیکسلهای آن درصورت وقوع کاهش ۱ و درغیراینصورت ۰ است (loss) و باندی که درصورت وقوع افزایش ۱ و درغیراینصورت ۰ است (gain). برای ایجاد باندی که پیکسلهای آن در هر دو باند loss و gain دارای ۱ باشد، میتوانید از روش منطقی and() در تصاویر استفاده کنید. روش and() بهصورت image1.and(image2) فراخوانی میشود و تصویری را برمیگرداند که در آن پیکسلها ۱ هستند، جایی که هر دو image1 و image2 برابر با ۱ هستند، و در جاهای دیگر ۰ هستند:
ویرایشگر کد (جاوا اسکریپت)
// Load the data and select the bands of interest. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); var gainImage = gfc2014.select(['gain']); // Use the and() method to create the lossAndGain image. var gainAndLoss = gainImage.and(lossImage); // Show the loss and gain image. Map.addLayer(gainAndLoss.updateMask(gainAndLoss), {palette: 'FF00FF'}, 'Gain and Loss');
نتیجه، که با نمای ماهوارهای روی آرکانزاس بزرگنمایی شده است، باید چیزی شبیه به شکل ۱ باشد.
با ترکیب این مثال با نتیجه حاصل از بخش قبلی، اکنون میتوان شکل ابتدای آموزش را بازآفرینی کرد:
ویرایشگر کد (جاوا اسکریپت)
// Displaying forest, loss, gain, and pixels where both loss and gain occur. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); var gainImage = gfc2014.select(['gain']); var treeCover = gfc2014.select(['treecover2000']); // Use the and() method to create the lossAndGain image. var gainAndLoss = gainImage.and(lossImage); // Add the tree cover layer in green. Map.addLayer(treeCover.updateMask(treeCover), {palette: ['000000', '00FF00'], max: 100}, 'Forest Cover'); // Add the loss layer in red. Map.addLayer(lossImage.updateMask(lossImage), {palette: ['FF0000']}, 'Loss'); // Add the gain layer in blue. Map.addLayer(gainImage.updateMask(gainImage), {palette: ['0000FF']}, 'Gain'); // Show the loss and gain image. Map.addLayer(gainAndLoss.updateMask(gainAndLoss), {palette: 'FF00FF'}, 'Gain and Loss');
کمیسازی تغییر جنگل در منطقه موردنظر
اکنون که با باندهای موجود در مجموعه داده Hansen et al. بیشتر آشنا شدید، میتوانیم
از مفاهیمی که تاکنون یاد گرفتهایم برای محاسبه آمار مربوط به افزایش و کاهش جنگل در منطقه
موردنظر استفاده کنیم. برای این کار باید از دادههای برداری (نقطهها، خطها، و چندضلعیها) استفاده کنیم. مجموعهداده برداری بهصورت FeatureCollection در Earth Engine نمایش داده میشود.
(درباره مجموعههای عارضه و نحوه
وارد کردن دادههای برداری بیشتر بدانید.)
در این بخش، کل مقدار جنگل ازدسترفته در جمهوری کنگو در سال ۲۰۱۲ را با مقدار جنگل ازدسترفته در مناطق حفاظتشده این کشور در همان زمان مقایسه میکنیم.
همانطور که در آموزش Earth Engine API یاد گرفتید، روش کلیدی برای محاسبه آمار در منطقه تصویر reduceRegion() است. (درباره کاهش
نواحی تصویر بیشتر بدانید.) برای مثال، فرض کنید میخواهیم تعداد پیکسلهای تخمینزدهشده را محاسبه کنیم
تا ازبین رفتن جنگل را درطول دوره مطالعه نشان دهیم. برای این منظور، کد زیر را درنظر بگیرید:
ویرایشگر کد (جاوا اسکریپت)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = countries.filter(ee.Filter.eq('country_na', 'Rep of the Congo')); // Get the forest loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); // Sum the values of forest loss pixels in the Congo Republic. var stats = lossImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo, scale: 30 }); print(stats);
این مثال از کاهنده ee.Reducer.sum() برای جمع کردن مقادیر پیکسلها در lossImage در عارضه congo استفاده میکند. چون
lossImage از پیکسلهایی تشکیل شده است که مقدار ۱ یا ۰ دارند (بهترتیب برای ازدست رفتن یا
ازدست نرفتن)، مجموع این مقادیر معادل تعداد پیکسلهای ازدسترفته
در منطقه است.
متأسفانه اجرای اسکریپت به این شکل منجر به خطایی مانند زیر میشود:
حداکثر تعداد پیشفرض پیکسلها در
reduceRegion() ۱۰ میلیون است. این
پیام خطا نشان میدهد که جمهوری کنگو حدود ۳۸۳ میلیون پیکسل
«لندست» را پوشش میدهد. خوشبختانه، reduceRegion()
پارامترهای زیادی میگیرد که یکی از آنها (maxPixels) به شما امکان میدهد تعداد
پیکسلهای مورداستفاده در محاسبه را کنترل کنید. مشخص کردن این پارامتر باعث میشود محاسبه با موفقیت انجام شود:
ویرایشگر کد (جاوا اسکریپت)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = countries.filter(ee.Filter.eq('country_na', 'Rep of the Congo')); // Get the forest loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); // Sum the values of forest loss pixels in the Congo Republic. var stats = lossImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo, scale: 30, maxPixels: 1e9 }); print(stats);
با ازهم باز کردن شیء چاپشده در کنسول، مشاهده میکنید که نتیجه
۴۸۹۷۹۳۳ پیکسل جنگل ازدسترفته است. میتوانید با برچسبگذاری برونداد و دریافت نتیجه موردنظر از واژهنامه برگرداندهشده توسط reduceRegion()، برونداد چاپی را در کنسول کمی تمیز کنید:
ویرایشگر کد (جاوا اسکریپت)
print('pixels representing loss: ', stats.get('loss'));
درحال محاسبه نواحی پیکسل
تقریباً آمادهاید تا به این سؤال پاسخ دهید که چه مقدار از مساحت جمهوری کنگو ازدست رفته است،
و چه مقدار از آن در مناطق حفاظتشده بوده است. بخش باقیمانده تبدیل پیکسلها
به مساحت واقعی است. این تبدیل مهم است زیرا لزوماً اندازه پیکسلهای ورودی به reduceRegion() را نمیدانیم. برای کمک به محاسبه مساحتها، Earth Engine روش ee.Image.pixelArea() را دارد که تصویری تولید میکند که در آن مقدار هر پیکسل مساحت پیکسل به متر مربع است. ضرب کردن
تصویر اتلاف با این تصویر ناحیه و سپس جمع کردن نتیجه، معیاری از ناحیه به ما میدهد:
ویرایشگر کد (جاوا اسکریپت)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = countries.filter(ee.Filter.eq('country_na', 'Rep of the Congo')); // Get the forest loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); var areaImage = lossImage.multiply(ee.Image.pixelArea()); // Sum the values of forest loss pixels in the Congo Republic. var stats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo, scale: 30, maxPixels: 1e9 }); print('pixels representing loss: ', stats.get('loss'), 'square meters');
اکنون نتیجه این است که ۴٬۳۷۲٬۵۷۵٬۰۵۲ متر مربع درطول دوره مطالعه ازدست رفته است.
اکنون آماده پاسخ دادن به سؤال ابتدای این بخش هستید - در سال ۲۰۱۲ چه مقدار از مساحت جنگل در جمهوری کنگو ازبین رفت و چه مقدار از آن در مناطق حفاظتشده بود؟
ویرایشگر کد (جاوا اسکریپت)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = ee.Feature( countries .filter(ee.Filter.eq('country_na', 'Rep of the Congo')) .first() ); // Subset protected areas to the bounds of the congo feature // and other criteria. Clip to the intersection with congo. var protectedAreas = ee.FeatureCollection('WCMC/WDPA/current/polygons') .filter(ee.Filter.and( ee.Filter.bounds(congo.geometry()), ee.Filter.neq('IUCN_CAT', 'VI'), ee.Filter.neq('STATUS', 'proposed'), ee.Filter.lt('STATUS_YR', 2010) )) .map(function(feat){ return congo.intersection(feat); }); // Get the loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossIn2012 = gfc2014.select(['lossyear']).eq(12); var areaImage = lossIn2012.multiply(ee.Image.pixelArea()); // Calculate the area of loss pixels in the Congo Republic. var stats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo.geometry(), scale: 30, maxPixels: 1e9 }); print( 'Area lost in the Congo Republic:', stats.get('lossyear'), 'square meters' ); // Calculate the area of loss pixels in the protected areas. var stats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: protectedAreas.geometry(), scale: 30, maxPixels: 1e9 }); print( 'Area lost in protected areas:', stats.get('lossyear'), 'square meters' );
خروجی نشان میدهد که از ۳۴۸٬۰۳۶٬۲۹۵ متر مربع جنگلی که در سال ۲۰۱۲ در جمهوری کنگو ازبین رفته است، ۱۱٬۸۸۰٬۹۷۶ متر مربع آن در مناطق حفاظتشده بوده است، همانطور که در جدول پایگاه داده جهانی مناطق حفاظتشده نشان داده شده است.
تنها تفاوت این دستورگان با دستورگان قبلی، اضافه شدن اطلاعات منطقه حفاظتشده و تغییر دستورگان از بررسی کل تلفات به بررسی تلفات در سال ۲۰۱۲ است. این کار به دو تغییر نیاز داشت. ابتدا، تصویر جدیدی از lossIn2012
وجود دارد که در آن، عدد ۱ نشاندهنده ازدست رفتن جنگل در سال ۲۰۱۲ است و عدد ۰ نشاندهنده عدم ازدست رفتن جنگل است. دوم، چون نام گروه متفاوت است (lossyear بهجای loss)، نام ویژگی باید در عبارت چاپ تغییر کند.
در بخش بعدی، برخیاز روشهای پیشرفته را برای محاسبه و نمودار کردن ازبین رفتن جنگلها برای هر سال کاوش خواهیم کرد، نه فقط یک سال که در این بخش انجام دادیم.