Nachdem Sie sich mit JavaScript vertraut gemacht haben, erfahren Sie hier, wie Sie JavaScript-Objekte und ‑Primitive in Earth Engine-Container einfügen, um sie an den Server zu senden und bei Google zu verarbeiten.
Strings
Definieren Sie beispielsweise einen String und fügen Sie ihn dann in den ee.String()-Container ein, der an Earth Engine gesendet werden soll:
Code-Editor (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);
Stellen Sie sich ee.Thing als Container für ein Objekt vor, das auf dem Server vorhanden ist. In diesem Beispiel wird der String zuerst definiert und dann in den Container eingefügt. Sie können den Container und seinen Inhalt auch auf einmal definieren. Beispiel:
Code-Editor (JavaScript)
// Define a string that exists on the server. var serverString = ee.String('This is on the server.'); print('String on the server:', serverString);
Das erste Argument für print() ist zwar nur ein String auf dem Client, das zweite Argument wird jedoch tatsächlich an den Server gesendet, um ausgewertet und dann zurückgesendet zu werden.
iWork Numbers
Verwenden Sie ee.Number(), um Zahlenobjekte auf dem Server zu erstellen. Verwenden Sie beispielsweise die JavaScript-Methode Math.E, um einen konstanten Wert auf dem Server zu erstellen:
Code-Editor (JavaScript)
// Define a number that exists on the server. var serverNumber = ee.Number(Math.E); print('e=', serverNumber);
Die Methoden ee.String() und ee.Number() sind Konstruktoren. Ein Konstruktor nimmt sein Argument (und möglicherweise andere Parameter) entgegen, fügt es in einen Container ein und gibt den Container und seinen Inhalt als Earth Engine-Objekt zurück, das Sie in Ihrem Code bearbeiten können. Jeder Konstruktor, der mit ee beginnt, gibt ein Earth Engine-Objekt zurück.
Methoden für Earth Engine-Objekte
Nachdem Sie ein Earth Engine-Objekt erstellt haben, müssen Sie es mit Earth Engine-Methoden verarbeiten. In diesem Beispiel können Sie das Earth Engine-Objekt nicht mit dem JavaScript-Befehl Math.log() verarbeiten. Sie müssen die entsprechende Methode verwenden, die für ein ee.Number definiert ist:
Code-Editor (JavaScript)
// Use a built-in function to perform an operation on the number. var logE = serverNumber.log(); print('log(e)=', logE);
In diesem Beispiel ist log() eine Methode für ein ee.Number-Objekt. (Auf dem Tab Dokumente links im Code-Editor finden Sie eine Liste aller Methoden für jeden Earth Engine-Objekttyp, z. B. ee.Number > log()). Beachten Sie, dass die Methoden von Earth Engine-Objekten andere Earth Engine-Objekte zurückgeben.
Listen
Wenn Sie eine JavaScript-Liste in ein ee.List-Objekt auf dem Server umwandeln möchten, können Sie ein JavaScript-Literal in einen Container einfügen, wie es auch bei Zahlen und Strings der Fall ist. Earth Engine bietet auch serverseitige Methoden zum Erstellen von Zahlenfolgen. Beispiel:
Code-Editor (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);
Da die ee.List-Objekte nur auf dem Server vorhanden sind, müssen Sie die von Earth Engine bereitgestellten Funktionen verwenden, um mit ihnen zu interagieren. Wenn Sie beispielsweise ein Element aus der Liste abrufen möchten, verwenden Sie die Methode get() des Objekts ee.List:
Code-Editor (JavaScript)
// Use a method on an ee.List to extract a value. var value = sequence.get(2); print('Value at index 2:', value);
Streaming
Manchmal kennt Earth Engine den Typ eines Objekts nicht, das von einer Methode zurückgegeben wird. Sie als Programmierer wissen, dass die Variable value im vorherigen Beispiel ein Zahlenobjekt ist. Wenn Sie jedoch versuchen, die Methode add() eines ee.Number zu verwenden, erhalten Sie eine Fehlermeldung wie:
Dies ist bei der Funktion get() üblich, die alle Arten von Earth Engine-Objekten zurückgeben kann. Verwenden Sie zur Korrektur den Konstruktor ee.Number, um das Ergebnis zu casten:
Code-Editor (JavaScript)
// Cast the return value of get() to a number. print('No error:', ee.Number(value).add(3));
Wörterbücher
Sie können ein Earth Engine-Dictionary aus einem JavaScript-Objekt erstellen, wie bei Strings, Zahlen und Listen. Bei der Erstellung können Sie JavaScript-Funktionen verwenden, um das Earth Engine-Objekt zu initialisieren. In diesem Fall wird ein ee.Dictionary direkt aus einem JavaScript-Literalobjekt erstellt:
Code-Editor (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 diesem Beispiel sehen Sie, dass Sie, sobald Sie ein ee.Dictionary haben, Methoden für das ee.Dictionary verwenden müssen, um Werte abzurufen (im Gegensatz zum JavaScript-Wörterbuch in der vorherigen Lektion). Insbesondere gibt get(key) den Wert zurück, der mit key verknüpft ist. Da der von get() zurückgegebene Objekttyp beliebig sein kann, müssen Sie das Objekt in den richtigen Typ umwandeln, wenn Sie etwas anderes damit tun möchten, als es auszugeben. Beachten Sie auch, dass die Methode keys() ein ee.List zurückgibt.
Daten
Datumsobjekte sind die Art und Weise, wie Earth Engine die Zeit darstellt. Wie in den vorherigen Beispielen ist es wichtig, zwischen einem JavaScript-Date-Objekt und einem Earth Engine-ee.Date-Objekt zu unterscheiden. Erstellen Sie ein ee.Date-Objekt aus einem String, aus einem JavaScript-Date-Objekt oder mithilfe statischer Methoden, die von der ee.Date-Klasse bereitgestellt werden. Weitere Informationen finden Sie im Abschnitt „Datum“ auf dem Tab Dokumente. In diesem Beispiel wird die Erstellung von Datumsangaben aus Strings oder einem JavaScript-Datum veranschaulicht, das Millisekunden seit Mitternacht am 1. Januar 1970 darstellt:
Code-Editor (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);
Datumsangaben sind nützlich, um Sammlungen zu filtern, insbesondere als Argumente für die Methode filterDate(). Weitere Informationen zum Sortieren von Sammlungen finden Sie in diesem Abschnitt der Seite „Erste Schritte“.
Exkurs: Parameter nach Name übergeben
Argumente für Earth Engine-Methoden können in der richtigen Reihenfolge übergeben werden. Wenn Sie beispielsweise ein ee.Date aus Jahr, Monat und Tag erstellen möchten, können Sie Parameter der statischen Methode fromYMD() in der Reihenfolge Jahr, Monat, Tag übergeben:
Code-Editor (JavaScript)
var aDate = ee.Date.fromYMD(2017, 1, 13); print('aDate:', aDate);
Alternativ können Sie die Parameter nach Namen in beliebiger Reihenfolge übergeben. Das bedeutet zwar mehr Code, kann aber die Lesbarkeit und Wiederverwendbarkeit verbessern. Wenn Sie Parameter nach Name übergeben möchten, übergeben Sie ein JavaScript-Objekt, in dem die Schlüssel des Objekts die Namen der Methodenparameter und die Werte die Argumente für die Methode sind. Beispiel:
Code-Editor (JavaScript)
var theDate = ee.Date.fromYMD({ day: 13, month: 1, year: 2017 }); print('theDate:', theDate);
Die Namen der Objekteigenschaften (die Schlüssel) müssen mit den in der ee.Date.fromYMD()-Dokumentation angegebenen Namen übereinstimmen. Das Objekt, das als Argument übergeben wird, kann zur Wiederverwendung in einer Variablen gespeichert werden, wie im JavaScript-Objektbeispiel gezeigt.
Sie haben jetzt genügend Kenntnisse über JavaScript, um mit der Earth Engine zu arbeiten. Eine ausführlichere Erläuterung zu JavaScript- und Earth Engine-Objekten finden Sie auf der Seite Client im Vergleich zu Server.
Im nächsten Abschnitt erfahren Sie mehr über Konzepte der funktionalen Programmierung, um for-Schleifen, if/else-Bedingungen und Iterationen in Earth Engine effektiv zu verwenden.