Теперь, когда вы освоили 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.