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

Tính toán lượng 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 đã cho 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 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.

Để nhóm đầu ra 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 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ình trạng mất rừng. Chúng ta cũng thay đổi hàm giảm thành hàm giảm theo nhóm, chỉ định chỉ mục dải tần của dải tần nhóm (1) để các vùng pixel sẽ được cộng và nhóm theo giá trị trong dải tần 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 đoạn 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 đầu ra một chút để kết quả là một từ điển, với năm là khoá và khu vực tổn thấ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ờ đây, khi đã có số liệu về tổn thất hằng năm, chúng ta có thể chuẩn bị một 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 đồ dưới đây.

Tutorial_Hansen_17_chart.png
Hình 1. Biểu đồ về tình trạng mất rừng theo năm

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