Визуализация изображений и их каналов

Теперь, когда вы готовы начать писать код JavaScript для Earth Engine, скопируйте следующий код в редактор кода:

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

// Instantiate an image with the Image constructor.
var image = ee.Image('CGIAR/SRTM90_V4');

// Zoom to a location.
Map.setCenter(-112.8598, 36.2841, 9); // Center on the Grand Canyon.

// Display the image on the map.
Map.addLayer(image);

Нажмите кнопку Run (Выполнить) в верхней части редактора кода и посмотрите, как на карте появится очень серое изображение. Не волнуйтесь, скоро вы сможете его улучшить. Если синтаксис какой-либо части этого примера вам незнаком, ознакомьтесь с руководством по JavaScript для Earth Engine.

Конструктор изображений

Первое, что мы видим в этом примере, – конструктор изображений ee.Image(). Аргумент, передаваемый конструктору, – это строковый идентификатор изображения в каталоге данных Earth Engine. Полный список возможных аргументов для конструктора изображений можно найти на вкладке Docs (Документы) слева от редактора кода. На вкладке Docs (Документы) представлена самая актуальная информация о возможностях Earth Engine.

Чтобы найти идентификатор изображения, выполните поиск в Data Catalog Earth Engine с помощью инструмента поиска в верхней части редактора кода. Например, введите в строке поиска слово "высота" и посмотрите на список растровых изображений. Нажмите на запись SRTM Digital Elevation Data Version 4, чтобы посмотреть дополнительную информацию об этом наборе данных. Справа от описания набора данных находится поле Image ID (Идентификатор изображения). Обратите внимание, что идентификатор изображения в примере скопирован из идентификатора изображения, показанного в описании набора данных.

Вместо копирования и вставки идентификаторов изображений можно использовать кнопку Импорт в описании набора данных или ссылку Импорт в правой части результатов поиска. Если вы нажмете на ссылку или кнопку импорта, переменная будет автоматически создана в специальном разделе Импорт в верхней части скрипта. Чтобы переименовать переменную, нажмите на ее название в разделе импорта.

Настройка карты

Вторая новая часть этого примера – вызов Map.setCenter(). Этот метод объекта Map, который представляет отображение карты в редакторе кода, центрирует карту по заданной долготе, широте (в десятичных градусах) и уровню масштабирования, где 1 – это уменьшенный масштаб, при котором на карте показана вся поверхность Земли. Чем больше число, тем крупнее масштаб. Чтобы узнать обо всех методах объекта Map, откройте раздел Map на вкладке Docs (Документы) в левой части редактора кода.

Добавление слоя на карту

Последняя строка в примере означает, что для добавления изображения на карту в редакторе кода используется метод addLayer() объекта Map.

Поздравляем! Вы создали свой первый скрипт Earth Engine. В следующем разделе вы узнаете, как улучшить изображение.

Отступление: изображения в Earth Engine

Изображения в Earth Engine (подробнее см. на этой странице) состоят из одного или нескольких каналов. У каждого канала в изображении есть свое название, значения пикселей, разрешение пикселей и проекция. Как вы скоро обнаружите, у изображения SRTM есть один канал: elevation.

Когда вы добавляете изображение на карту с помощью Map.addLayer(), Earth Engine необходимо определить, как сопоставить значения в полосах изображения с цветами на дисплее. Если на карту добавляется одноканальное изображение, по умолчанию Earth Engine отображает канал в оттенках серого, где минимальное значение присваивается черному цвету, а максимальное – белому. Если вы не укажете минимальное и максимальное значения, Earth Engine будет использовать значения по умолчанию. Например, изображение, которое вы только что добавили на карту, отображается как изображение в оттенках серого, растянутое на весь диапазон данных, или как 16-битное целое число со знаком [-32768, 32767]. (по умолчанию каналы float растягиваются до [0, 1], а каналы byte – до [0, 255]).

Чтобы узнать тип данных изображения, выведите его на печать и проверьте объект изображения на вкладке Консоль. Например, вставьте следующий код после предыдущего:

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

print('SRTM image', image);

Когда вы нажмете "Выполнить", в консоли появится объект. Чтобы посмотреть свойства объекта, разверните его, нажав на стрелку () слева от объекта или свойства. Разверните объект изображения, свойство bands, канал elevation с индексом 0 и свойство data_type канала elevation, чтобы узнать, что это тип данных signed int16.

Настройка визуализации слоев

Чтобы изменить способ растягивания данных, можно передать другой параметр в вызов Map.addLayer(). В частности, второй параметр, visParams, позволяет указать минимальное и максимальное значения для отображения. Чтобы узнать, какие значения использовать, активируйте вкладку Inspector (Инспектор) и нажмите на карту, чтобы получить представление о диапазоне значений пикселей. Вы также можете использовать Менеджер слоев, чтобы интерактивно растянуть данные, а затем посмотреть минимальное и максимальное значения, соответствующие процентилям или стандартным отклонениям. Предположим, что в результате таких экспериментов вы определили, что данные должны быть растянуты до [0, 3000]. Чтобы показать изображение с использованием этого диапазона, используйте:

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

Map.addLayer(image, {min: 0, max: 3000}, 'custom visualization');

Обратите внимание, что параметр visParams – это объект со свойствами, определяющими min и max. Подробнее об объектах JavaScript рассказывается в руководстве по JavaScript и этой статье. Обратите внимание, что третий параметр для Map.addLayer() – это название слоя, которое отображается в Менеджере слоев. Результат должен выглядеть примерно так, как показано на рисунке 1. Наведите указатель мыши на поле Слои справа, чтобы увидеть, как изменится название слоя.

Tutorial_api_01_elevation.png
Рисунок 1. Изображение высоты в оттенках серого, растянутое до [0, 3000].

Чтобы показать один диапазон с помощью палитры, добавьте свойство palette в объект visParams:

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

Map.addLayer(image, {min: 0, max: 3000, palette: ['blue', 'green', 'red']},
    'custom palette');

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

Tutorial_api_02_palette.png
Рисунок 2. Изображение высоты в виде цветовой шкалы от синего до красного, растянутое до [0, 3000].

Отступление: палитры

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

Цвета задаются с помощью стандартной схемы значений цвета CSS (подробнее об этом читайте в этой статье). Цвета можно указывать по названию или в виде шестнадцатеричных строк, обозначающих сочетание красного, зеленого и синего. Наименьшее значение в любой из трех позиций – 00 (представляет десятичное число 0), а наибольшее – FF (представляет десятичное число 255). Строка "000000" соответствует черному цвету, "FFFFFF" – белому, "FF0000" – красному, "00FF00" – зеленому, а "0000FF" – синему. Подробную информацию вы найдете в разделе Цветовые палитры. Другие варианты растягивания можно задать с помощью дескрипторов Styled Layer Descriptor, как описано в этом разделе.

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