Объекты 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() — это просто строка на стороне клиента, второй аргумент фактически отправляется на сервер для оценки, а затем отправляется обратно.

Числа

Используйте 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 для его обработки. В этом примере вы не можете использовать метод JavaScript Math.log() для обработки этого объекта 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()). Обратите внимание, что методы объектов 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 из строки, объекта JavaScript Date или с помощью статических методов, предоставляемых классом ee.Date . (Подробнее см. раздел «Date» на вкладке «Документация» ). Этот пример иллюстрирует создание даты из строк или объекта JavaScript date, представляющего миллисекунды с полуночи 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.