Объекты Earth Engine

Теперь, когда вы освоили JavaScript, узнайте, как помещать объекты JavaScript и примитивы в контейнеры Earth Engine для отправки на сервер и обработки в Google.

Струны

Например, определите строку, а затем поместите ее в контейнер ee.String(), чтобы отправить в Earth Engine:

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

// Define a string, then put it into an EE container.
var aString = 'To the cloud!';
var eeString = ee.String(aString);
print('Where to?', eeString);

ee.Thing – это контейнер для объекта, который существует на сервере. В этом примере сначала определяется строка, а затем она помещается в контейнер. Вы также можете определить контейнер и его содержимое одновременно. Пример:

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

// Define a string that exists on the server.
var serverString = ee.String('This is on the server.');
print('String on the server:', serverString);

Хотя первый аргумент print() – это просто строка на клиенте, второй аргумент отправляется на сервер для оценки, а затем возвращается.

iWork Numbers

Используйте ee.Number(), чтобы создать объекты номеров на сервере. Например, используйте метод JavaScript Math.E, чтобы создать постоянное значение на сервере:

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

// Define a number that exists on the server.
var serverNumber = ee.Number(Math.E);
print('e=', serverNumber);

Методы ee.String() и ee.Number() являются конструкторами. Конструктор принимает аргумент (и, возможно, другие параметры), помещает его в контейнер и возвращает контейнер и его содержимое в виде объекта Earth Engine, которым вы можете манипулировать в своем коде. Любой конструктор, начинающийся с ee, возвращает объект Earth Engine.

Методы для объектов Earth Engine

Обратите внимание, что после создания объекта Earth Engine для его обработки необходимо использовать методы Earth Engine. В этом примере вы не можете использовать Math.log() JavaScript для обработки этого объекта Earth Engine. Вместо этого используйте эквивалентный метод, определенный для ee.Number:

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

// Use a built-in function to perform an operation on the number.
var logE = serverNumber.log();
print('log(e)=', logE);

В этом примере log() – метод для объекта ee.Number. Чтобы посмотреть список всех методов для каждого типа объектов Earth Engine, например ee.Number > log(), используйте вкладку Docs (Документы) в левой части редактора кода. Обратите внимание, что методы объектов Earth Engine возвращают другие объекты Earth Engine.

Списки

Чтобы преобразовать список JavaScript в объект ee.List на сервере, можно поместить литерал JavaScript в контейнер, как в случае с числами и строками. Earth Engine также предоставляет удобные серверные методы для создания последовательностей чисел. Пример:

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

// Make a sequence the hard way.
var eeList = ee.List([1, 2, 3, 4, 5]);
// Make a sequence the easy way!
var sequence = ee.List.sequence(1, 5);
print('Sequence:', sequence);

Поскольку объекты ee.List существуют только на сервере, для взаимодействия с ними используйте функции, предоставляемые Earth Engine. Например, чтобы получить элемент из списка, используйте метод get() объекта ee.List:

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

// Use a method on an ee.List to extract a value.
var value = sequence.get(2);
print('Value at index 2:', value);

Трансляция

Иногда Earth Engine не знает тип объекта, возвращаемого методом. Вы, как программист, знаете, что переменная value в предыдущем примере – это числовой объект. Но если вы попытаетесь использовать метод add() объекта ee.Number, то получите ошибку, подобную следующей:

Это часто происходит с функцией get(), которая может возвращать самые разные объекты Earth Engine. Чтобы исправить это, используйте конструктор ee.Number для приведения результата:

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

// Cast the return value of get() to a number.
print('No error:', ee.Number(value).add(3));

Словари

Вы можете создать объект Dictionary Earth Engine из объекта JavaScript, как в случае со строками, числами и списками. При создании вы можете использовать функции JavaScript для инициализации объекта Earth Engine. В этом случае объект ee.Dictionary создается непосредственно из литерального объекта JavaScript:

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

// Make a Dictionary on the server.
var dictionary = ee.Dictionary({
  e: Math.E,
  pi: Math.PI,
  phi: (1 + Math.sqrt(5)) / 2
});

// Get some values from the dictionary.
print('Euler:', dictionary.get('e'));
print('Pi:', dictionary.get('pi'));
print('Golden ratio:', dictionary.get('phi'));

// Get all the keys:
print('Keys: ', dictionary.keys());

Обратите внимание, что в этом примере для получения значений из объекта ee.Dictionary необходимо использовать методы этого объекта ee.Dictionary (в отличие от словаря JavaScript в предыдущем уроке). В частности, get(key) возвращает значение, связанное с key. Поскольку тип объекта, возвращаемого методом get(), может быть любым, если вы собираетесь выполнять с объектом какие-либо действия, кроме печати, вам необходимо привести его к правильному типу. Также обратите внимание, что метод keys() возвращает ee.List.

Даты

Объекты Date – это способ представления времени в Earth Engine. Как и в предыдущих примерах, важно различать объект JavaScript Date и объект Earth Engine ee.Date. Создайте объект ee.Date из строки, из объекта Date JavaScript или с помощью статических методов, предоставляемых классом ee.Date. Подробную информацию можно найти в разделе Date (Дата) на вкладке Docs (Документы). В примере ниже показано, как создать даты на основе строк или даты JavaScript, представляющей миллисекунды, прошедшие с полуночи 1 января 1970 г.:

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

// Define a date in Earth Engine.
var date = ee.Date('2015-12-31');
print('Date:', date);

// Get the current time using the JavaScript Date.now() method.
var now = Date.now();
print('Milliseconds since January 1, 1970', now);

// Initialize an ee.Date object.
var eeNow = ee.Date(now);
print('Now:', eeNow);

Даты удобно использовать для фильтрации коллекций, в частности в качестве аргументов метода filterDate(). Подробнее о сортировке коллекций рассказывается в этом разделе статьи "Начало работы".

Отступление: передача параметров по имени

Аргументы в методы Earth Engine можно передавать по порядку. Например, чтобы создать объект ee.Date на основе года, месяца и дня, можно передать параметры статического метода fromYMD() в следующем порядке: год, месяц, день.

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

var aDate = ee.Date.fromYMD(2017, 1, 13);
print('aDate:', aDate);

Вы также можете передавать параметры по имени в любом порядке. Хотя кода может быть больше, это может улучшить читаемость и возможность повторного использования. Чтобы передать параметры по имени, передайте объект JavaScript, в котором ключи объекта – это имена параметров метода, а значения – аргументы метода. Пример:

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

var theDate = ee.Date.fromYMD({
  day: 13,
  month: 1,
  year: 2017
});
print('theDate:', theDate);

Обратите внимание, что названия свойств объекта (ключи) соответствуют названиям, указанным в документации по ee.Date.fromYMD(). Обратите внимание, что объект, передаваемый в качестве аргумента, можно сохранить в переменной для повторного использования, как показано в примере объекта JavaScript.

Теперь у вас есть достаточное представление о JavaScript, чтобы начать использовать Earth Engine! Более подробное объяснение различий между объектами JavaScript и Earth Engine см. на странице Клиент и сервер.

В следующем разделе вы узнаете больше о концепциях функционального программирования, чтобы эффективно использовать циклы for, условия if/else и итерации в Earth Engine.