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