Диаграмма ежегодной потери лесов

Расчет ежегодной потери лесов

В предыдущем разделе вы узнали, как рассчитать общую площадь лесов, утраченных в заданном регионе, с помощью метода reduceRegion. Вместо того чтобы рассчитывать общие потери, было бы полезно рассчитать потери за каждый год. Для этого в Earth Engine используется сгруппированный редуктор.

Чтобы сгруппировать выходные данные reduceRegion(), можно указать полосу группировки, которая определяет группы по целочисленным значениям пикселей. В следующем примере мы немного изменим предыдущий код и добавим канал lossYear к исходному изображению. Каждый пиксель в полосе lossYear содержит значения от 0 до 14, указывающие на год, в котором произошла потеря. Мы также меняем редуктор на сгруппированный редуктор, указывая индекс полосы группирующей полосы (1), чтобы площади пикселей суммировались и группировались в соответствии со значением в полосе lossYear.

Редактор кода (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);

После выполнения приведенного выше кода вы увидите площадь ежегодной потери лесов, напечатанную во вложенном списке под названием groups. Мы можем немного отформатировать вывод, чтобы получить результат в виде словаря, где ключом будет год, а значением – площадь потерь. Обратите внимание, что мы используем метод format(), чтобы преобразовать значения года с 0–14 на 2000–2014.

Редактор кода (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);

Создание диаграммы

Теперь, когда у нас есть годовые показатели потерь, мы готовы подготовить диаграмму. Мы будем использовать метод ui.Chart.array.values(). Этот метод принимает массив (или список) входных значений и массив (или список) ярлыков для оси X.

Редактор кода (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);

Результат должен выглядеть так, как показано на диаграмме ниже.

Tutorial_Hansen_17_chart.png
Рисунок 1. Диаграмма "Потеря лесов по годам"

В следующем разделе вы узнаете о другом наборе данных для мониторинга уничтожения лесов – FORMA – и сравните его с данными Хансена и др.