Набор данных «Глобальное изменение лесного покрова» Хансена и др. (2013) в Earth Engine отображает изменения лесного покрова в глобальном масштабе с разрешением 30 метров в период с 2000 по 2014 год. Начнём с добавления данных Хансена и др. на карту. Импортируйте данные об изменении лесного покрова в глобальном масштабе ( подробнее о поиске и импорте наборов данных ), выполнив поиск по запросу «Hansen forest» и указав имя импортируемого файла gfc2014
, или скопируйте следующий код в редактор кода:
Редактор кода (JavaScript)
var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); Map.addLayer(gfc2014);
Нажмите кнопку «Выполнить» в верхней части редактора кода, и вы увидите что-то похожее на рисунок 1.

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

Напомним, что при добавлении многоканального изображения на карту первые три канала изображения выбираются как красный, зелёный и синий соответственно и растягиваются в соответствии с типом данных каждого канала. Изображение выглядит красным, поскольку первые три канала — это treecover2000
, loss
и gain
. Канал treecover2000
выражается в процентах и имеет значения, значительно превышающие значения loss
(зелёный) и gain
(синий), которые являются двоичными ({0, 1}). Поэтому изображение отображается в подавляющем красном цвете.
Полосы данных по глобальному изменению лесного покрова следующие:
Название группы | Описание | Диапазон |
---|---|---|
treecover2000 | Процент покрытия деревьев в пикселе. | 0 - 100 |
потеря | 1, если в течение периода исследования когда-либо произойдет убыток. | 0 или 1 |
прирост | 1, если прирост когда-либо произойдет в течение периода исследования. | 0 или 1 |
убыточный год | Год, в котором был понесен убыток, индексируется на единицу с 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 |
последний_b30 | Красный диапазон Landsat 7, созданный на основе последних действительных пикселей в 2012 году. | 0 - 255 |
последний_b40 | Ближний инфракрасный диапазон Landsat 7, созданный на основе последних действительных пикселей в 2012 году. | 0 - 255 |
последний_b50 | Первый коротковолновый инфракрасный диапазон Landsat 7, созданный на основе последних действующих пикселей 2012 года. | 0 - 255 |
последний_b70 | Второй коротковолновый инфракрасный диапазон Landsat 7, созданный на основе последних действительных пикселей 2012 года. | 0 - 255 |
маска данных | Данные отсутствуют (0), нанесенная на карту поверхность земли (1) и постоянные водоемы (2). | 0, 1, 2 |
Чтобы отобразить лесной покров 2000 года в виде изображения в оттенках серого, можно использовать канал treecover2000
, указанный во втором аргументе Map.addLayer()
:
Редактор кода (JavaScript)
Map.addLayer(gfc2014, {bands: ['treecover2000']}, 'treecover2000');
В результате получится изображение, похожее на показанное на рисунке 3.

Вот изображение, на котором использованы 3 канала: каналы Landsat 5, 4 и 3 за 2015 год. Эта комбинация каналов показывает здоровую растительность зеленым цветом, а почву — лиловым:
Редактор кода (JavaScript)
Map.addLayer( gfc2014, {bands: ['last_b50', 'last_b40', 'last_b30']}, 'false color');
Результат должен выглядеть примерно так, как показано на рисунке 4.

Наглядная визуализация набора данных Global Forest Change показывает площадь лесов в 2000 году зелёным цветом, потерю лесов — красным, а прирост лесов — синим. В частности, loss
лесов следует сделать первой полосой (красной), treecover2000
— второй (зелёной), а gain
— третьей (синей):
Редактор кода (JavaScript)
Map.addLayer(gfc2014, {bands: ['loss', 'treecover2000', 'gain']}, 'green');
Значения полосы потерь и усиления являются двоичными, поэтому они будут едва заметны на изображении, которое должно выглядеть примерно так, как показано на рисунке 5.

Мы хотим, чтобы спад леса отображался ярко-красным цветом, а прирост леса — ярко-синим. Чтобы это исправить, можно использовать параметр визуализации max
, чтобы задать диапазон, до которого растягиваются данные изображения. Обратите внимание, что параметр визуализации max
принимает список значений, соответствующих максимумам для каждого диапазона:
Редактор кода (JavaScript)
Map.addLayer(gfc2014, { bands: ['loss', 'treecover2000', 'gain'], max: [1, 255, 1] }, 'forest cover, loss, gain');
Результат должен выглядеть примерно так, как показано на рисунке 6.

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

Чтобы получить изображение, обещанное в начале урока, вы можете создать отдельные изображения для леса, потерь, прироста, а также для потерь и прироста. Добавьте каждое из этих изображений на карту в порядке, удобном для отображения.
Палитры
Чтобы отобразить каждое изображение в отдельном цвете, можно использовать параметр palette
метода Map.addLayer()
для одноканальных изображений. Палитры позволяют задать цветовую схему, в которой будет отображаться изображение ( подробнее о палитрах ). Вспомните руководство по API Earth Engine: цвета в палитре линейно растягиваются до min
и max
.
Например, чтобы использовать зеленую палитру для отображения изображения территории леса, можно использовать:
Редактор кода (JavaScript)
Map.addLayer(gfc2014, { bands: ['treecover2000'], palette: ['000000', '00FF00'] }, 'forest cover palette');
Результат должен выглядеть примерно так, как показано на рисунке 8.

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

Изображение на рисунке 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
по умолчанию равно нулю.

Маскировка
На всех представленных изображениях были большие чёрные области, где данные были равны нулю. Например, в океане нет деревьев. Чтобы сделать эти области прозрачными, можно замаскировать их значения. Каждый пиксель в Earth Engine имеет как значение, так и маску. Изображение визуализируется с прозрачностью, заданной маской: ноль соответствует полной прозрачности, а единица — полной непрозрачности.
Вы можете замаскировать изображение самим собой. Например, если замаскировать полосу treecover2000
самим собой, все области с нулевым лесным покровом станут прозрачными:
Редактор кода (JavaScript)
Map.addLayer(gfc2014.mask(gfc2014), { bands: ['treecover2000'], palette: ['000000', '00FF00'], max: 100 }, 'forest cover masked');
Результат должен выглядеть примерно так, как показано на рисунке 10.

Пример
Визуализировать данные Хансена, как в начале урока, практически возможно. В этом примере мы собираем всё вместе, но с одним небольшим отличием. Вместо указания параметра 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.

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