Ahora que te sientes cómodo con JavaScript, aprende a colocar objetos y primitivos de JavaScript en contenedores de Earth Engine para enviarlos al servidor y procesarlos en Google.
Strings
Por ejemplo, define una cadena y, luego, colócala en el contenedor ee.String()
para enviarla a Earth Engine:
Editor de código (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);
Piensa en ee.Thing
como un contenedor para algo que existe en el servidor. En este ejemplo, primero se define la cadena y, luego, se coloca en el contenedor. También puedes definir el contenedor y su contenido de una sola vez. Por ejemplo:
Editor de código (JavaScript)
// Define a string that exists on the server. var serverString = ee.String('This is on the server.'); print('String on the server:', serverString);
Si bien el primer argumento de print()
es solo una cadena en el cliente, el segundo argumento se envía al servidor para que se evalúe y, luego, se devuelve.
Numbers
Usa ee.Number()
para crear objetos de número en el servidor. Por ejemplo, usa el método Math.E
de JavaScript para crear un valor constante en el servidor:
Editor de código (JavaScript)
// Define a number that exists on the server. var serverNumber = ee.Number(Math.E); print('e=', serverNumber);
Los métodos ee.String()
y ee.Number()
son constructores. Un constructor toma su argumento (y posiblemente otros parámetros), lo coloca en un contenedor y devuelve el contenedor y su contenido como un objeto de Earth Engine que puedes manipular en tu código. Cualquier constructor que comience con ee
devuelve un objeto de Earth Engine.
Métodos en objetos de Earth Engine
Ten en cuenta que, una vez que creaste un objeto de Earth Engine, debes usar los métodos de Earth Engine para procesarlo. En este ejemplo, no puedes usar Math.log()
de JavaScript para procesar ese objeto de Earth Engine. Debes usar el método equivalente definido para un ee.Number
:
Editor de código (JavaScript)
// Use a built-in function to perform an operation on the number. var logE = serverNumber.log(); print('log(e)=', logE);
En este ejemplo, log()
es un método para un objeto ee.Number
. (Usa la pestaña Docs en el lado izquierdo del editor de código para ver una lista de todos los métodos para cada tipo de objeto de Earth Engine, por ejemplo, ee.Number > log). Ten en cuenta que los métodos de los objetos de Earth Engine devuelven otros objetos de Earth Engine.
Listas
Para convertir una lista de JavaScript en un objeto ee.List
en el servidor, puedes colocar un literal de JavaScript en un contenedor, como con números y cadenas. Earth Engine también proporciona métodos convenientes del servidor para crear secuencias de números. Por ejemplo:
Editor de código (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);
Dado que los objetos ee.List
solo existen en el servidor, usa las funciones proporcionadas por Earth Engine para interactuar con ellos. Por ejemplo, para obtener algo de la lista, usa el método get()
del objeto ee.List
:
Editor de código (JavaScript)
// Use a method on an ee.List to extract a value. var value = sequence.get(2); print('Value at index 2:', value);
Transmisión de contenido
A veces, Earth Engine no conoce el tipo de un objeto que se devuelve de un método. Tú, como programador, sabes que la variable value
del ejemplo anterior es un objeto numérico. Sin embargo, si intentas usar el método add()
de un ee.Number
, recibirás un error como el siguiente:
Esto es común con la función get()
, que podría devolver todo tipo de objetos de Earth Engine. Para corregirlo, usa el constructor ee.Number
para convertir el resultado:
Editor de código (JavaScript)
// Cast the return value of get() to a number. print('No error:', ee.Number(value).add(3));
Diccionarios
Puedes construir un objeto Dictionary
de Earth Engine a partir de un objeto JavaScript, como con cadenas, números y listas. En el momento de la construcción, puedes usar la funcionalidad de JavaScript para inicializar el objeto de Earth Engine. En este caso, un ee.Dictionary
se construye directamente a partir de un objeto literal de JavaScript:
Editor de código (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());
En este ejemplo, observa que, una vez que tienes un ee.Dictionary
, debes usar métodos en el ee.Dictionary
para obtener valores (a diferencia del diccionario de JavaScript en la lección anterior). Específicamente, get(key)
devuelve el valor asociado con key
. Dado que el tipo de objeto que devuelve get()
puede ser cualquiera, si vas a hacer algo con el objeto que no sea imprimirlo, debes convertirlo al tipo correcto. También ten en cuenta que el método keys()
devuelve un ee.List
.
Fechas
Los objetos de fecha son la forma en que Earth Engine representa el tiempo. Al igual que en los ejemplos anteriores, es importante distinguir entre un objeto Date
de JavaScript y un objeto ee.Date
de Earth Engine. Construye un ee.Date
a partir de una cadena, de un Date
de JavaScript o con los métodos estáticos que proporciona la clase ee.Date
. (Consulta la sección Fecha en la pestaña Documentos para obtener más detalles). En este ejemplo, se ilustra la construcción de fechas a partir de cadenas o de una fecha de JavaScript que representa milisegundos desde la medianoche del 1 de enero de 1970:
Editor de código (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);
Las fechas son útiles para filtrar colecciones, específicamente como argumentos para el método filterDate()
. Consulta esta sección de la página Primeros pasos para obtener más información sobre cómo ordenar colecciones.
Digresión: Cómo pasar parámetros por nombre
Los argumentos para los métodos de Earth Engine se pueden pasar en orden. Por ejemplo, para crear un objeto ee.Date
a partir del año, el mes y el día, puedes pasar los parámetros del método estático fromYMD()
en el orden año, mes y día:
Editor de código (JavaScript)
var aDate = ee.Date.fromYMD(2017, 1, 13); print('aDate:', aDate);
Como alternativa, puedes pasar los parámetros por nombre, en cualquier orden. Si bien puede haber más código, se puede mejorar la legibilidad y la reutilización. Para pasar parámetros por nombre, pasa un objeto de JavaScript en el que las claves del objeto son los nombres de los parámetros del método y los valores son los argumentos del método. Por ejemplo:
Editor de código (JavaScript)
var theDate = ee.Date.fromYMD({ day: 13, month: 1, year: 2017 }); print('theDate:', theDate);
Ten en cuenta que los nombres de las propiedades del objeto (las claves) coinciden con los nombres especificados en los documentos de ee.Date.fromYMD()
. También ten en cuenta que el objeto que se pasa como argumento se puede guardar en una variable para volver a usarlo, como se ilustra en el ejemplo de objeto de JavaScript.
Ahora tienes una introducción suficiente a JavaScript para comenzar a usar Earth Engine. Consulta la página Cliente vs. Servidor para obtener una explicación más detallada de los objetos de JavaScript y Earth Engine.
En la siguiente sección, obtén más información sobre los conceptos de programación funcional para usar de manera eficaz los bucles for, las condiciones if/else y las iteraciones en Earth Engine.