Набор данных об изменении лесного покрова
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.
Не волнуйтесь, скоро вы сможете его улучшить. Подробнее о визуализации изображений по умолчанию в Earth Engine… В конце этого раздела у вас будет изображение, похожее на рисунок 2, где зеленый цвет обозначает места, где в ходе исследования был обнаружен лес в 2000 году, красный – предполагаемую потерю леса за период исследования, синий – прирост леса за этот период, пурпурный – области, где лес был как потерян, так и приобретен, а нелесные области замаскированы.
Напомним, что при добавлении многоканального изображения на карту первые три канала изображения выбираются как красный, зеленый и синий соответственно и растягиваются в соответствии с типом данных каждого канала. Изображение выглядит красным, потому что первые три полосы – это 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.
Вот изображение, в котором используются три канала 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() для одноканальных изображений. Палитры позволяют задать цветовую схему, в которой будет отображаться изображение. Подробнее о палитрах… Вспомните из руководства по Earth Engine API, что цвета в палитре линейно растягиваются до 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() добавляет на карту слой. Чтобы увидеть эти слои, наведите указатель мыши на кнопку Слои в правом верхнем углу карты. Каждый слой можно включить или отключить с помощью флажка рядом с ним, а прозрачность слоя можно изменить с помощью ползунка рядом с названием слоя.
Мы уже почти можем создать изображение, показанное в начале руководства. Однако слой, показывающий пиксели с потерей и приростом, отсутствует. Это связано с тем, что нам нужно знать, как выполнять некоторые вычисления на полосах изображения, прежде чем мы сможем рассчитать, какие пиксели показывают как потерю, так и прирост. Об этом рассказывается в следующем разделе.