کمی سازی تغییر جنگل

بیایید با محاسبه مورد نیاز برای ایجاد باندی شروع کنیم که پیکسل ها را در جایی که Hansen et al. داده ها هم ضرر و هم سود را نشان می دهند.

هانسن و همکاران مجموعه داده دارای باندی است که پیکسل‌های آن 1 است که در آن ضرر رخ داده است و 0 در غیر این صورت ( loss ) و باندی است که 1 است که در آن سود رخ داده است و 0 در غیر این صورت ( gain ). برای ایجاد باندی که در آن پیکسل‌ها در هر دو باند loss و gain یک عدد 1 داشته باشند، می‌توانید از روش منطقی and() روی تصاویر استفاده کنید. متد and() مانند image1.and(image2) فراخوانی می‌شود و تصویری را برمی‌گرداند که در آن پیکسل‌ها 1 هستند که هر دو image1 و image2 1 هستند و 0 در جای دیگر:

ویرایشگر کد (جاوا اسکریپت)

// 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');

نتیجه، بزرگنمایی شده در آرکانزاس با نمای ماهواره ای، باید چیزی شبیه به شکل 1 باشد.

باخت آرکانزاس
شکل 1. پیکسل هایی با از دست دادن و افزایش جنگل در آرکانزاس.

با ترکیب این مثال با نتیجه بخش قبل ، اکنون می توان شکل را از ابتدای آموزش دوباره ایجاد کرد:

ویرایشگر کد (جاوا اسکریپت)

// 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');

کمی سازی تغییر جنگل در منطقه مورد علاقه

اکنون که با گروه های موسیقی هانسن و همکاران بیشتر آشنا شدید. مجموعه داده‌ها، می‌توانیم از مفاهیمی که تاکنون آموخته‌ایم برای محاسبه آمار در مورد سود و زیان جنگل در یک منطقه مورد علاقه استفاده کنیم. برای این کار باید از داده های برداری (نقاط، خطوط و چندضلعی ها) استفاده کنیم. یک مجموعه داده برداری به عنوان یک FeatureCollection در Earth Engine نشان داده می شود. (درباره مجموعه ویژگی ها و نحوه وارد کردن داده های برداری بیشتر بیاموزید.)

در این بخش، میزان کل تلفات جنگلی را که در جمهوری کنگو در سال 2012 اتفاق افتاده است با میزان تلفات جنگلی که در همان زمان در مناطق حفاظت شده این کشور اتفاق افتاده است، مقایسه خواهیم کرد.

همانطور که در آموزش 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 از پیکسل هایی تشکیل شده است که دارای مقدار 1 یا 0 هستند (به ترتیب برای از دست دادن یا عدم از دست دادن)، مجموع این مقادیر معادل تعداد پیکسل های از دست رفته در منطقه است.

متأسفانه اجرای اسکریپت همانطور که هست منجر به خطای زیر می شود:

حداکثر تعداد پیکسل های پیش فرض در reduceRegion() 10 میلیون است. این پیام خطا نشان می دهد که جمهوری کنگو حدود 383 میلیون پیکسل Landsat را پوشش می دهد. خوشبختانه، 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);

با گسترش شی چاپ شده در کنسول، مشاهده کنید که نتیجه 4897933 پیکسل از جنگل از بین می رود. می‌توانید با برچسب زدن به خروجی و دریافت نتیجه مورد علاقه از دیکشنری که توسط 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');

اکنون نتیجه 4,372,575,052 متر مربع از دست رفته در طول دوره مطالعه است.

شما اکنون آماده پاسخگویی به این سوال در ابتدای این بخش هستید - چه مقدار از جنگل در جمهوری کنگو در سال 2012 از بین رفت و چه مقدار از آن در مناطق حفاظت شده بود؟

ویرایشگر کد (جاوا اسکریپت)

// 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'
);

خروجی نشان می‌دهد که از 348,036,295 متر مربع جنگل از دست رفته در جمهوری کنگو در سال 2012، 11,880,976 آن در مناطق حفاظت‌شده بوده است که در جدول پایگاه داده جهانی مناطق حفاظت‌شده نشان داده شده است.

تنها تغییرات بین این اسکریپت و اسکریپت قبلی اضافه کردن اطلاعات ناحیه حفاظت شده و تغییر اسکریپت از نگاه کردن به ضرر کلی به بررسی ضرر در سال 2012 است. این نیاز به دو تغییر داشت. اول، یک تصویر جدید lossIn2012 وجود دارد که دارای 1 است که در آن ضرر در سال 2012 ثبت شده است، در غیر این صورت 0. دوم، چون نام باند متفاوت است ( lossyear به جای loss )، نام دارایی باید در بیانیه چاپی تغییر می کرد.

در بخش بعدی ، به جای تنها یک سال که در این بخش انجام دادیم، چند روش پیشرفته برای محاسبه و ترسیم تلفات جنگل برای هر سال را بررسی خواهیم کرد.