Экспорт диаграмм и изображений

Earth Engine — мощный аналитический инструмент, но вам может потребоваться экспортировать результаты анализа для встраивания диаграмм, изображений, карт и т. д. в отчёты или публикации. В этом разделе вы научитесь создавать диаграммы и изображения, которые можно экспортировать и просматривать в других программах. Напомним, что в предыдущем разделе вы использовали следующий код для добавления канала NDVI к каждому изображению в коллекции, где переменная l8 ссылается на коллекцию данных об отражательной способности Landsat 8 TOA :

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

// Import the Landsat 8 TOA image collection.
var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

// Map a function over the Landsat 8 TOA collection to add an NDVI band.
var withNDVI = l8.map(function(image) {
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
  return image.addBands(ndvi);
});

Диаграммы

Предположим, вам нужна диаграмма NDVI с течением времени в заданной точке. Чтобы построить такую диаграмму, первым шагом будет выбор интересующей точки. Создайте точку, воспользовавшись инструментом рисования точек ( ) и создайте геометрическую модель из одной точки в интересующей вас области. (Если у вас уже есть импортированные объекты, наведите курсор на «Импорт геометрии» и сначала нажмите «+ Новый слой ». Найдите точку в сельскохозяйственной области, лиственном лесу, однолетнем луге или другом земельном покрове с годовым циклом. Присвойте имя импортируемой roi . (Информацию о программном создании геометрических объектов см. на этой странице ).

Теперь используем точку roi для построения графика изменения NDVI с течением времени в пикселе под этой точкой. Для создания графиков в Earth Engine используется пакет ui.Chart . ( Подробнее о создании графиков в Earth Engine ). В частности, для построения графика с течением времени можно использовать метод ui.Chart.image.series() :

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

// Create a chart.
var chart = ui.Chart.image.series({
  imageCollection: withNDVI.select('NDVI'),
  region: roi,
  reducer: ee.Reducer.first(),
  scale: 30
}).setOptions({title: 'NDVI over time'});

// Display the chart in the console.
print(chart);

Для геометрии roi мы выбрали точку в сельскохозяйственной зоне, получив диаграмму, похожую на ту, что показана на рисунке 10. Обратите внимание, что параметры конструктора диаграммы включают редуктор и масштаб, например, reduceRegion() . Поскольку точка, которую мы предоставляем как область, может пересекать только один пиксель, достаточно использовать редуктор «first». Если область больше, следует использовать редуктор «mean» или другой редуктор, определяющий способ агрегации пикселей. Также обратите внимание, что для визуализации диаграммы достаточно просто вывести её на печать.

Tutorial_api_10_ndvi_chart.png
Рисунок 10. График изменения индекса NDVI Landsat с течением времени в точечной геометрии.

Отступление: простая маскировка облаков для Landsat

Вы, возможно, заметили на этой диаграмме, что временной ряд значений NDVI в этой точке выглядит несколько зашумлённым. Вероятно, это связано с облачностью. Чтобы смягчить этот эффект, Earth Engine включает алгоритм маскировки облаков для сенсоров Landsat с тепловым диапазоном: ee.Algorithms.Landsat.simpleCloudScore() . Он принимает в качестве входных данных изображение отражения Landsat TOA и добавляет диапазон с именем cloud , который представляет собой индекс облачности в пикселе от нуля до 100, от наименьшей до наибольшей облачности соответственно. Изменив функцию, наложенную на коллекцию, вы можете использовать произвольное пороговое значение (20) для индекса облачности, чтобы немного подчистить диаграмму:

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

var cloudlessNDVI = l8.map(function(image) {
  // Get a cloud score in [0, 100].
  var cloud = ee.Algorithms.Landsat.simpleCloudScore(image).select('cloud');

  // Create a mask of cloudy pixels from an arbitrary threshold.
  var mask = cloud.lte(20);

  // Compute NDVI.
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');

  // Return the masked image with an NDVI band.
  return image.addBands(ndvi).updateMask(mask);
});

print(ui.Chart.image.series({
  imageCollection: cloudlessNDVI.select('NDVI'),
  region: roi,
  reducer: ee.Reducer.first(),
  scale: 30
}).setOptions({title: 'Cloud-masked NDVI over time'}));

Результат с маскировкой облаков показан на рисунке 11. Обратите внимание, что временной ряд выглядит немного более сглаженным, но всё ещё может содержать пикселы, затронутые облаками. Отрегулируйте пороговое значение индекса облачности и проанализируйте временной ряд на графике, чтобы понять, как это пороговое значение может повлиять на ваши результаты.

Tutorial_api_11_cloudless_chart.png
Рисунок 11. График маскированного облаками NDVI с течением времени в точечной геометрии.

Экспорт изображений

Вы уже видели, как экспортировать диаграмму данных, рассчитанную Earth Engine, но как насчёт целого изображения? Предположим, например, что вы создали композит с самыми зелёными пикселями , как обсуждалось в предыдущем разделе :

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

var greenest = cloudlessNDVI.qualityMosaic('NDVI');

Единственное отличие этого кода от предыдущего заключается в том, что теперь мы используем коллекцию с облачной маской. Вы можете экспортировать её подмножество (определённое областью) с помощью пакета Export . ( Подробнее об экспорте растровых и векторных данных из Earth Engine .) Например, чтобы экспортировать изображение, которое можно легко встроить в другие документы, создадим изображение визуализации, как вы делали ранее , и экспортируем его в папку Google Диска:

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

// Create a 3-band, 8-bit, color-IR composite to export.
var visualization = greenest.visualize({
  bands: ['B5', 'B4', 'B3'],
  max: 0.4
});

// Create a task that you can launch from the Tasks tab.
Export.image.toDrive({
  image: visualization,
  description: 'Greenest_pixel_composite',
  scale: 30
});

При запуске этого кода обратите внимание, что на вкладке «Задачи» создаётся новая задача. Чтобы открыть диалоговое окно настройки экспорта, нажмите кнопку «Выполнить» на вкладке « Задачи» . После настройки задачи нажмите кнопку «Выполнить» в диалоговом окне, чтобы начать экспорт. Но прежде чем это сделать, учтите следующее:

При экспорте без аргумента region следует проявлять осторожность: если задать относительно небольшое значение для scale и масштаб карты будет увеличен до большой области, то в папку на Диске будет экспортировано потенциально очень большое изображение. Подробнее и список возможных параметров конфигурации см. в документации Export.image.toDrive() на вкладке «Документы» .

На этом введение в API Earth Engine завершено! Вы уже ознакомились с большинством наиболее распространённых функций Earth Engine и сможете уверенно приступить к более сложному анализу. Обязательно ознакомьтесь с документацией и поищите ответы на форуме . Удачного программирования!