Введение в данные об изменении лесов в мире (Хансен и др.)

Набор данных об изменении лесного покрова Global Forest Change (Hansen et al., 2013) в Earth Engine содержит информацию об изменении лесного покрова по всему миру в период с 2000 по 2014 год с разрешением 30 м. Начнем с добавления на карту данных Хансена и др. Вы можете импортировать данные об изменении лесного покрова в мире (подробнее о поиске и импорте наборов данных), выполнив поиск по запросу "Hansen forest" и назвав импортируемый набор gfc2014, или скопировать в редактор кода следующий фрагмент:

Редактор кода (JavaScript)

var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015');
Map.addLayer(gfc2014);

Нажмите кнопку Run (Выполнить) в верхней части редактора кода. Вы должны увидеть что-то похожее на рисунок 1.

изменение лесного покрова (по умолчанию)
Рисунок 1. Визуализация по умолчанию данных об изменении лесного покрова, полученных Хансеном и др. (2013).

Не волнуйтесь, скоро вы сможете его улучшить. Подробнее о визуализации изображений по умолчанию в Earth Engine… В конце этого раздела у вас будет изображение, похожее на рисунок 2, где зеленый цвет обозначает места, где в ходе исследования был обнаружен лес в 2000 году, красный – предполагаемую потерю леса за период исследования, синий – прирост леса за этот период, пурпурный – области, где лес был как потерян, так и приобретен, а нелесные области замаскированы.

изменение лесного покрова (пользовательские настройки)
Рисунок 2. Настраиваемая визуализация данных об изменении лесного покрова, полученных Хансеном и др. (2013).

Напомним, что при добавлении многоканального изображения на карту первые три канала изображения выбираются как красный, зеленый и синий соответственно и растягиваются в соответствии с типом данных каждого канала. Изображение выглядит красным, потому что первые три полосы – это treecover2000, loss и gain. Полоса treecover2000 выражается в процентах и имеет значения, которые намного выше, чем у полос loss (зеленая) и gain (синяя), которые являются двоичными ({0, 1}). Поэтому на изображении преобладает красный цвет.

Каналы в наборе данных Global Forest Change:

Название группыОписаниеДиапазон
treecover2000Процент тени от деревьев в пикселе.0–100
поражения 1, если в течение периода исследования произошла потеря. 0 или 1
набрано1, если за период исследования был прирост. 0 или 1
lossyearГод, когда произошла потеря, начиная с 2001 года, или ноль, если потери не было.0–12
first_b30Красный диапазон Landsat 7, построенный на основе первых действительных пикселей в 2000 году (или ранее, если в 2000 году не было действительных пикселей). 0–255
first_b40Ближний инфракрасный диапазон Landsat 7, построенный на основе первых действительных пикселей в 2000 году.0–255
first_b50Первый коротковолновый инфракрасный диапазон Landsat 7, построенный на основе первых допустимых пикселей в 2000 году.0–255
first_b70Второй коротковолновый инфракрасный диапазон Landsat 7, построенный на основе первых действительных пикселей в 2000 году.0–255
last_b30Красный диапазон Landsat 7, построенный на основе последних действительных пикселей в 2012 году. 0–255
last_b40Ближний инфракрасный диапазон Landsat 7, построенный на основе последних действительных пикселей в 2012 году.0–255
last_b50Первый коротковолновый инфракрасный диапазон Landsat 7, построенный на основе последних действительных пикселей за 2012 год.0–255
last_b70Второй коротковолновый инфракрасный диапазон Landsat 7, построенный на основе последних действительных пикселей 2012 года.0–255
datamaskНет данных (0), нанесенная на карту поверхность суши (1) и постоянные водоемы (2).0, 1, 2

Чтобы отобразить лесной покров в 2000 году в виде изображения в оттенках серого, можно использовать полосу treecover2000, указанную во втором аргументе для Map.addLayer():

Редактор кода (JavaScript)

Map.addLayer(gfc2014, {bands: ['treecover2000']}, 'treecover2000');

В результате получится изображение, похожее на рисунок 3.

Лесной покров в США
Рисунок 3. Черно-белое изображение тени от деревьев в США в 2000 году.

Вот изображение, в котором используются три канала Landsat (5, 4 и 3) за 2015 год. В этой комбинации каналов здоровая растительность показана зеленым цветом, а почва – розовато-лиловым.

Редактор кода (JavaScript)

Map.addLayer(
    gfc2014, {bands: ['last_b50', 'last_b40', 'last_b30']}, 'false color');

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

Условный цвет (США)
Рисунок 4. Landsat 7, 2015 г., композитное изображение США в условных цветах.

На одной из визуализаций набора данных Global Forest Change площадь лесов в 2000 году показана зеленым цветом, сокращение площади лесов – красным, а увеличение – синим. В частности, сделайте loss первой полосой (красной), treecover2000 – второй (зеленой), а gain – третьей (синей):

Редактор кода (JavaScript)

Map.addLayer(gfc2014, {bands: ['loss', 'treecover2000', 'gain']}, 'green');

Значения полос потерь и прироста являются двоичными, поэтому они будут едва видны на изображении, которое должно выглядеть примерно так, как на рисунке 5.

Лесной покров США
Рисунок 5. Тень от деревьев в США в 2000 году (зеленый цвет).

Мы хотим, чтобы потеря леса отображалась ярко-красным цветом, а прирост – ярко-синим. Чтобы исправить это, мы можем использовать параметр визуализации max, чтобы задать диапазон, до которого растягиваются данные изображения. Обратите внимание, что параметр визуализации max принимает список значений, соответствующих максимумам для каждого диапазона:

Редактор кода (JavaScript)

Map.addLayer(gfc2014, {
  bands: ['loss', 'treecover2000', 'gain'],
  max: [1, 255, 1]
}, 'forest cover, loss, gain');

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

Изменение лесов в США
Рисунок 6. Сокращение площади лесов в США (красный), лесной покров в 2000 году (зеленый) и прирост (синий).

В результате получается изображение, на котором зеленым цветом обозначены леса, красным – их сокращение, синим – увеличение, а пурпурным – и то, и другое. Однако при ближайшем рассмотрении становится ясно, что это не совсем так. Вместо красного цвета для убытков используется оранжевый. Это происходит потому, что ярко-красные пиксели смешиваются с зелеными пикселями под ними, в результате чего получаются оранжевые пиксели. Аналогично, пиксели, где есть лес, его потеря и прирост, окрашены в розовый цвет – сочетание зеленого, ярко-красного и ярко-синего. (см. рис. 7).

Изменение лесов на северо-западе США
Рисунок 7. Потеря лесов на северо-западе США (красный), лесной покров в 2000 году (зеленый) и прирост (синий).

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

Палитры

Чтобы показать каждое изображение в другом цвете, вы можете использовать параметр palette функции Map.addLayer() для одноканальных изображений. Палитры позволяют задать цветовую схему, в которой будет отображаться изображение. Подробнее о палитрах… Вспомните из руководства по Earth Engine API, что цвета в палитре линейно растягиваются до min и max.

Например, чтобы использовать зеленую палитру для отображения изображения лесного покрова, вы можете использовать:

Редактор кода (JavaScript)

Map.addLayer(gfc2014, {
  bands: ['treecover2000'],
  palette: ['000000', '00FF00']
}, 'forest cover palette');

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

Площадь лесов (Северная Америка)
Рисунок 8. Лесной покров в Северной Америке в 2000 году.

Увеличив масштаб, вы сможете лучше оценить разрешение снимков. На рисунке 9 показана область вокруг города Марискаль-Эстигаррибия в Парагвае.

площадь лесов в Парагвае
Рисунок 9. Лесной покров в окрестностях города Марискаль-Эстигаррибия в Парагвае в 2000 году.

Изображение, показанное на рисунке 3, немного темное. Проблема в том, что полоса treecover2000 имеет байтовый тип данных ([0, 255]), хотя на самом деле значения являются процентами ([0, 100]). Чтобы сделать изображение ярче, можно задать параметры min и/или max. Затем палитра растягивается между этими экстремумами.

Редактор кода (JavaScript)

Map.addLayer(gfc2014, {
  bands: ['treecover2000'],
  palette: ['000000', '00FF00'],
  max: 100
}, 'forest cover percent');

Результат должен выглядеть примерно так, как показано на рисунке 9. Обратите внимание, что в этом примере задан только параметр max. По умолчанию min равно нулю.

растянутый флаг Парагвая
Рисунок 9. Лесной покров вокруг города Марискаль-Эстигаррибия в Парагвае в 2000 году, растянутый до [0, 100].

Маски

На всех изображениях, которые я показывал, были большие чёрные области, где данные равны нулю. Например, в океане нет деревьев. Чтобы сделать эти области прозрачными, можно замаскировать их значения. Каждый пиксель в Earth Engine имеет как значение, так и маску. Изображение отображается с прозрачностью, заданной маской, где ноль – полностью прозрачное, а единица – полностью непрозрачное.

Вы можете замаскировать изображение им самим. Например, если вы замаскируете слой treecover2000 им же самим, все области, где лесной покров равен нулю, станут прозрачными:

Редактор кода (JavaScript)

Map.addLayer(gfc2014.mask(gfc2014), {
  bands: ['treecover2000'],
  palette: ['000000', '00FF00'],
  max: 100
}, 'forest cover masked');

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

Лесной покров в Северной и Южной Америке
Рисунок 10. Тень от деревьев в 2000 году, растянутая и замаскированная.

Пример

Теперь мы можем создать визуализацию данных Хансена, похожую на ту, что была в начале руководства. В этом примере мы объединяем все вместе с одним небольшим отличием. Вместо того чтобы указывать параметр bands в вызове Map.addLayer, мы создаем новые изображения с помощью select():

Редактор кода (JavaScript)

var treeCover = gfc2014.select(['treecover2000']);
var lossImage = gfc2014.select(['loss']);
var gainImage = gfc2014.select(['gain']);

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

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

Прирост/убыток в Северной и Южной Америке
Рисунок 11. Уменьшение площади лесов (красный), площадь лесов в 2000 году (зеленый) и увеличение площади лесов (синий).

Обратите внимание, что есть три вызова addLayer(). Каждый вызов addLayer() добавляет на карту слой. Чтобы увидеть эти слои, наведите указатель мыши на кнопку Слои в правом верхнем углу карты. Каждый слой можно включить или отключить с помощью флажка рядом с ним, а прозрачность слоя можно изменить с помощью ползунка рядом с названием слоя.

Мы уже почти можем создать изображение, показанное в начале руководства. Однако слой, показывающий пиксели с потерей и приростом, отсутствует. Это связано с тем, что нам нужно знать, как выполнять некоторые вычисления на полосах изображения, прежде чем мы сможем рассчитать, какие пиксели показывают как потерю, так и прирост. Об этом рассказывается в следующем разделе.