Mengukur Perubahan Hutan

Mari kita mulai dengan perhitungan yang diperlukan untuk membuat rentang yang menampilkan piksel tempat data Hansen et al. menunjukkan kehilangan dan perolehan.

Set data Hansen et al. memiliki band yang pikselnya bernilai 1 jika terjadi kehilangan dan 0 jika tidak (loss) dan band yang bernilai 1 jika terjadi perolehan dan 0 jika tidak (gain). Untuk membuat band yang pikselnya bernilai 1 di kedua band loss dan gain, Anda dapat menggunakan metode logis and() pada gambar. Metode and() dipanggil seperti image1.and(image2) dan menampilkan gambar yang pikselnya bernilai 1 jika image1 dan image2 bernilai 1, dan 0 di tempat lain:

Code Editor (JavaScript)

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

Hasilnya, yang diperbesar ke Arkansas dengan tampilan satelit, akan terlihat seperti Gambar 1.

Loss Arkansas
Gambar 1. Pixel dengan kehilangan dan perolehan hutan di Arkansas.

Dengan menggabungkan contoh ini dengan hasil dari bagian sebelumnya, kini Anda dapat membuat ulang gambar dari awal tutorial:

Code Editor (JavaScript)

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

Mengukur Perubahan Hutan di Area yang Diminati

Setelah Anda lebih memahami rentang dalam set data Hansen dkk., kita dapat menggunakan konsep yang telah dipelajari untuk menghitung statistik tentang perolehan dan kehilangan hutan di wilayah yang diminati. Untuk itu, kita perlu menggunakan data vektor (titik, garis, dan poligon). Kumpulan data vektor direpresentasikan sebagai FeatureCollection di Earth Engine. (Pelajari lebih lanjut kumpulan fitur dan cara mengimpor data vektor.)

Di bagian ini, kita akan membandingkan total jumlah kehilangan hutan yang terjadi di Republik Kongo pada tahun 2012 dengan jumlah kehilangan hutan yang terjadi di kawasan lindung negara tersebut pada waktu yang sama.

Seperti yang Anda pelajari dalam tutorial Earth Engine API, metode utama untuk menghitung statistik di wilayah gambar adalah reduceRegion(). (Pelajari lebih lanjut cara mengurangi region gambar.) Misalnya, kita ingin menghitung jumlah piksel yang diperkirakan mewakili hilangnya hutan selama periode studi. Untuk tujuan tersebut, pertimbangkan kode berikut:

Code Editor (JavaScript)

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

Contoh ini menggunakan peredam ee.Reducer.sum() untuk menjumlahkan nilai piksel dalam lossImage dalam fitur congo. Karena lossImage terdiri dari piksel yang memiliki nilai 1 atau 0 (masing-masing untuk kehilangan atau tidak kehilangan), jumlah nilai ini setara dengan jumlah piksel kehilangan di wilayah tersebut.

Sayangnya, menjalankan skrip seperti apa adanya akan menghasilkan error seperti:

Jumlah piksel maksimum default di reduceRegion() adalah 10 juta. Pesan error ini menunjukkan bahwa Republik Kongo mencakup sekitar 383 juta piksel Landsat. Untungnya, reduceRegion() mengambil banyak parameter, salah satunya (maxPixels) memungkinkan Anda mengontrol jumlah piksel yang digunakan dalam komputasi. Menentukan parameter ini memungkinkan komputasi berhasil:

Code Editor (JavaScript)

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

Dengan meluaskan objek yang dicetak ke konsol, amati bahwa hasilnya adalah 4897933 piksel hutan yang hilang. Anda dapat membersihkan cetakan di konsol dengan memberi label pada output dan mendapatkan hasil yang diinginkan dari kamus yang ditampilkan oleh reduceRegion():

Code Editor (JavaScript)

print('pixels representing loss: ', stats.get('loss'));

Menghitung Area Piksel

Anda hampir siap menjawab pertanyaan tentang seberapa luas area yang hilang di Republik Kongo, dan seberapa luas area tersebut berada di kawasan lindung. Bagian yang tersisa adalah mengonversi piksel menjadi area sebenarnya. Konversi ini penting karena kita tidak selalu mengetahui ukuran piksel yang dimasukkan ke reduceRegion(). Untuk membantu menghitung area, Earth Engine memiliki metode ee.Image.pixelArea() yang menghasilkan gambar dengan nilai setiap piksel adalah area piksel dalam meter persegi. Mengalikan gambar kerugian dengan gambar area ini, lalu menjumlahkan hasilnya akan memberi kita ukuran area:

Code Editor (JavaScript)

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

Sekarang hasilnya adalah 4.372.575.052 meter persegi yang hilang selama periode studi.

Sekarang Anda siap menjawab pertanyaan di awal bagian ini - berapa banyak area hutan yang hilang di Republik Kongo pada tahun 2012, dan berapa banyak area tersebut yang berada di kawasan lindung?

Code Editor (JavaScript)

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

Output menunjukkan bahwa dari 348.036.295 meter persegi hutan yang hilang di Republik Kongo pada tahun 2012, 11.880.976 di antaranya berada di kawasan lindung, seperti yang ditampilkan dalam tabel World Database on Protected Areas.

Satu-satunya perubahan antara skrip ini dan skrip sebelumnya adalah penambahan informasi area yang dilindungi dan perubahan skrip dari melihat kerugian secara keseluruhan menjadi melihat kerugian pada tahun 2012. Hal ini memerlukan dua perubahan. Pertama, ada gambar lossIn2012 baru yang memiliki angka 1 jika kerugian tercatat pada tahun 2012, dan 0 jika tidak. Kedua, karena nama bandnya berbeda (lossyear, bukan loss), nama properti harus diubah dalam pernyataan cetak.

Di bagian berikutnya, kita akan mempelajari beberapa metode lanjutan untuk menghitung dan memetakan hilangnya hutan setiap tahun, bukan hanya satu tahun seperti yang kita lakukan di bagian ini.