Ahora que te sientes cómodo con JavaScript, aprende a colocar objetos y primitivas 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 un elemento 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);
Aunque 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úmeros 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 creas 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 que se encuentra en el lado izquierdo
del editor de código para ver una lista de todos los métodos de 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 los números y las cadenas. Earth Engine
también proporciona métodos de conveniencia 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 que proporciona Earth Engine para interactuar con ellos. Por ejemplo, para obtener un elemento 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. 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, obtendrá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 Dictionary de Earth Engine a partir de un objeto de 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, se construye un ee.Dictionary
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 de la lección anterior). Específicamente, get(key) devuelve el valor asociado con key. Dado que el tipo de objeto que muestra get()
podría ser cualquiera, si vas a hacer algo con el objeto, además de imprimirlo,
debes convertirlo al tipo correcto. Ten en cuenta también que el método keys() devuelve un ee.List.
Fechas
Los objetos Date 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 métodos estáticos que proporciona la
clase ee.Date. (consulta la sección Fecha en la pestaña
Docs para
obtener más detalles). En este ejemplo, se ilustra la construcción de fechas a partir de cadenas o 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 del 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 de los métodos de Earth Engine se pueden pasar en orden, por ejemplo, para crear un
ee.Date a partir del año, el mes y el día, puedes pasar 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 ser más código, 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 sean los nombres de los parámetros del método y los valores sean 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 reutilizarlo, 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 vs. 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.