Lập biểu đồ về tình trạng mất rừng hằng năm

Tính toán diện tích rừng bị mất hằng năm

Trong phần trước, bạn đã tìm hiểu cách tính tổng diện tích rừng bị mất trong khu vực quan tâm nhất định bằng phương thức reduceRegion. Thay vì tính tổng mức tổn thất, bạn nên tính mức tổn thất cho từng năm. Cách để đạt được điều này trong Earth Engine là sử dụng Grouped Reducer (Bộ giảm thiểu theo nhóm).

Để nhóm kết quả của reduceRegion(), bạn có thể chỉ định một dải nhóm xác định các nhóm theo giá trị pixel số nguyên. Trong ví dụ sau, chúng ta sẽ sửa đổi một chút mã trước đó và thêm dải lossYear vào hình ảnh gốc. Mỗi pixel trong dải lossYear chứa các giá trị từ 0 đến 14, cho biết năm xảy ra tổn thất. Chúng ta cũng thay đổi trình rút gọn thành trình rút gọn được nhóm, chỉ định chỉ mục dải của dải nhóm (1) để các vùng pixel được tính tổng và nhóm theo giá trị trong dải lossYear.

Trình soạn thảo mã (JavaScript)

// Load country boundaries from LSIB.
var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');
// Get a feature collection with just the Congo feature.
var congo = countries.filter(ee.Filter.eq('country_co', 'CF'));

// Get the loss image.
// This dataset is updated yearly, so we get the latest version.
var gfc2017 = ee.Image('UMD/hansen/global_forest_change_2017_v1_5');
var lossImage = gfc2017.select(['loss']);
var lossAreaImage = lossImage.multiply(ee.Image.pixelArea());

var lossYear = gfc2017.select(['lossyear']);
var lossByYear = lossAreaImage.addBands(lossYear).reduceRegion({
  reducer: ee.Reducer.sum().group({
    groupField: 1
    }),
  geometry: congo,
  scale: 30,
  maxPixels: 1e9
});
print(lossByYear);

Sau khi chạy mã ở trên, bạn sẽ thấy diện tích rừng bị mất hằng năm được in ra trong một danh sách lồng nhau có tên là groups. Chúng ta có thể định dạng kết quả một chút để biến kết quả thành một từ điển, trong đó năm là khoá và diện tích rừng bị mất là giá trị. Lưu ý rằng chúng ta đang sử dụng phương thức format() để chuyển đổi các giá trị năm từ 0-14 thành 2000-2014.

Trình soạn thảo mã (JavaScript)

var statsFormatted = ee.List(lossByYear.get('groups'))
  .map(function(el) {
    var d = ee.Dictionary(el);
    return [ee.Number(d.get('group')).format("20%02d"), d.get('sum')];
  });
var statsDictionary = ee.Dictionary(statsFormatted.flatten());
print(statsDictionary);

Tạo biểu đồ

Giờ thì chúng ta đã có số liệu về mức tổn thất hằng năm, nên có thể chuẩn bị biểu đồ. Chúng ta sẽ sử dụng phương thức ui.Chart.array.values(). Phương thức này nhận một mảng (hoặc danh sách) các giá trị đầu vào và một mảng (hoặc danh sách) các nhãn cho trục X.

Trình soạn thảo mã (JavaScript)

var chart = ui.Chart.array.values({
  array: statsDictionary.values(),
  axis: 0,
  xLabels: statsDictionary.keys()
}).setChartType('ColumnChart')
  .setOptions({
    title: 'Yearly Forest Loss',
    hAxis: {title: 'Year', format: '####'},
    vAxis: {title: 'Area (square meters)'},
    legend: { position: "none" },
    lineWidth: 1,
    pointSize: 3
  });
print(chart);

Kết quả sẽ có dạng như biểu đồ bên dưới.

Tutorial_Hansen_17_chart.png
Hình 1. Biểu đồ về diện tích rừng bị mất theo năm

Trong phần tiếp theo, bạn sẽ tìm hiểu về một tập dữ liệu giám sát nạn phá rừng khác, FORMA, và so sánh tập dữ liệu này với dữ liệu của Hansen và cộng sự.