Oggetti Earth Engine

Ora che hai familiarità con JavaScript, scopri come inserire oggetti e primitive JavaScript nei container Earth Engine per inviarli al server ed elaborarli su Google.

Stringa

Ad esempio, definisci una stringa, quindi inseriscila nel container ee.String() da inviare a Earth Engine:

Editor di codice (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);

Pensa a ee.Thing come a un contenitore per un elemento che esiste sul server. In questo esempio, la stringa viene definita prima e poi inserita nel contenitore. Puoi anche definire il contenitore e i relativi contenuti contemporaneamente. Ad esempio:

Editor di codice (JavaScript)

// Define a string that exists on the server.
var serverString = ee.String('This is on the server.');
print('String on the server:', serverString);

Anche se il primo argomento di print() è solo una stringa sul client, il secondo argomento viene effettivamente inviato al server per essere valutato, quindi restituito.

Numeri

Utilizza ee.Number() per creare oggetti numerici sul server. Ad esempio, utilizza il metodo JavaScript Math.E per creare un valore costante sul server:

Editor di codice (JavaScript)

// Define a number that exists on the server.
var serverNumber = ee.Number(Math.E);
print('e=', serverNumber);

I metodi ee.String() e ee.Number() sono costruttori. Un costruttore accetta il suo argomento (e possibilmente altri parametri), lo inserisce in un contenitore e restituisce il contenitore e il suo contenuto come oggetto Earth Engine che puoi manipolare nel tuo codice. Qualsiasi costruttore che inizia con ee restituisce un oggetto Earth Engine.

Metodi sugli oggetti Earth Engine

Tieni presente che una volta creato un oggetto Earth Engine, devi utilizzare i metodi di Earth Engine per elaborarlo. In questo esempio, non puoi utilizzare Math.log() di JavaScript per elaborare l'oggetto Earth Engine. Devi utilizzare il metodo equivalente definito per un ee.Number:

Editor di codice (JavaScript)

// Use a built-in function to perform an operation on the number.
var logE = serverNumber.log();
print('log(e)=', logE);

In questo esempio, log() è un metodo per un oggetto ee.Number. (Utilizza la scheda Docs sul lato sinistro dell'editor di codice per visualizzare un elenco di tutti i metodi per ogni tipo di oggetto Earth Engine, ad esempio ee.Number > log()). Tieni presente che i metodi degli oggetti Earth Engine restituiscono altri oggetti Earth Engine.

Elenchi

Per trasformare un elenco JavaScript in un oggetto ee.List sul server, puoi inserire un valore letterale JavaScript in un contenitore come con numeri e stringhe. Earth Engine fornisce anche metodi pratici lato server per creare sequenze di numeri. Ad esempio:

Editor di codice (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);

Poiché gli oggetti ee.List esistono solo sul server, utilizza le funzioni fornite da Earth Engine per interagire con loro. Ad esempio, per estrarre un elemento dall'elenco, utilizza il metodo get() dell'oggetto ee.List:

Editor di codice (JavaScript)

// Use a method on an ee.List to extract a value.
var value = sequence.get(2);
print('Value at index 2:', value);

Trasmissione

A volte, Earth Engine non conosce il tipo di oggetto restituito da un metodo. In qualità di programmatore, sai che la variabile value nell'esempio precedente è un oggetto numerico. Tuttavia, se provi a utilizzare il metodo add() di un ee.Number, riceverai un errore simile a questo:

Questo è comune con la funzione get(), che potrebbe restituire tutti i tipi di oggetti Earth Engine. Per correggerlo, utilizza il costruttore ee.Number per eseguire il cast del risultato:

Editor di codice (JavaScript)

// Cast the return value of get() to a number.
print('No error:', ee.Number(value).add(3));

Dizionari

Puoi costruire un Dictionary Earth Engine da un oggetto JavaScript, come con stringhe, numeri ed elenchi. In fase di costruzione, puoi utilizzare la funzionalità JavaScript per inizializzare l'oggetto Earth Engine. In questo caso, un ee.Dictionary viene costruito direttamente da un oggetto letterale JavaScript:

Editor di codice (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());

In questo esempio, osserva che una volta che hai un ee.Dictionary, devi utilizzare i metodi su ee.Dictionary per ottenere i valori (a differenza del dizionario JavaScript nella lezione precedente). Nello specifico, get(key) restituisce il valore associato a key. Poiché il tipo di oggetto restituito da get() potrebbe essere qualsiasi cosa, se intendi fare qualcosa con l'oggetto oltre a stamparlo, devi eseguirne il cast al tipo corretto. Tieni presente inoltre che il metodo keys() restituisce un ee.List.

Date

Gli oggetti data sono il modo in cui Earth Engine rappresenta il tempo. Come negli esempi precedenti, è importante distinguere tra un oggetto JavaScript Date e un oggetto Earth Engine ee.Date. Crea un ee.Date da una stringa, da un Date JavaScript o utilizzando metodi statici forniti dalla classe ee.Date. Per maggiori dettagli, consulta la sezione Data nella scheda Documenti. Questo esempio illustra la costruzione di date da stringhe o da una data JavaScript che rappresenta i millisecondi trascorsi dalla mezzanotte del 1° gennaio 1970:

Editor di codice (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);

Le date sono utili per filtrare le raccolte, in particolare come argomenti del metodo filterDate(). Per saperne di più sull'ordinamento delle raccolte, consulta questa sezione della pagina Guida introduttiva.

Digressione: trasmettere i parametri per nome

Gli argomenti dei metodi Earth Engine possono essere passati in ordine. Ad esempio, per creare un ee.Date da anno, mese e giorno, puoi passare i parametri del metodo statico fromYMD() nell'ordine anno, mese, giorno:

Editor di codice (JavaScript)

var aDate = ee.Date.fromYMD(2017, 1, 13);
print('aDate:', aDate);

In alternativa, puoi passare i parametri per nome, in qualsiasi ordine. Anche se potrebbe essere più codice, può migliorare la leggibilità e la riusabilità. Per passare i parametri per nome, passa un oggetto JavaScript in cui le chiavi dell'oggetto sono i nomi dei parametri del metodo e i valori sono gli argomenti del metodo. Ad esempio:

Editor di codice (JavaScript)

var theDate = ee.Date.fromYMD({
  day: 13,
  month: 1,
  year: 2017
});
print('theDate:', theDate);

Tieni presente che i nomi delle proprietà dell'oggetto (le chiavi) corrispondono ai nomi specificati nella documentazione di ee.Date.fromYMD(). Tieni presente inoltre che l'oggetto passato come argomento può essere salvato in una variabile per essere riutilizzato, come illustrato nell'esempio di oggetto JavaScript.

Ora hai una conoscenza sufficiente di JavaScript per iniziare a utilizzare Earth Engine. Consulta la pagina Client vs. Server (Client e server) per una spiegazione più dettagliata degli oggetti JavaScript e Earth Engine.

Nella sezione successiva, scopri di più sui concetti di programmazione funzionale per utilizzare in modo efficace cicli for, condizioni if/else e iterazioni in Earth Engine.