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() の最初の引数はクライアント上の文字列にすぎませんが、2 番目の引数は実際にサーバーに送信されて評価され、返されます。
Numbers
ee.Number() を使用して、サーバーに数値オブジェクトを作成します。たとえば、Math.E JavaScript メソッドを使用して、サーバーに定数値を作成します。
コードエディタ(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 オブジェクトのメソッドです。(コードエディタの左側にある [Docs] タブを使用して、すべての 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 が提供する関数を使用して操作します。たとえば、リストから要素を取得するには、ee.List オブジェクトの get() メソッドを使用します。
コードエディタ(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 変数が数値オブジェクトであることを知っています。しかし、ee.Number の add() メソッドを使用しようとすると、次のようなエラーが発生します。
これは、あらゆる種類の Earth Engine オブジェクトを返す可能性がある get() 関数でよく見られます。これを修正するには、ee.Number コンストラクタを使用して結果をキャストします。
コードエディタ(JavaScript)
// Cast the return value of get() to a number. print('No error:', ee.Number(value).add(3));
辞書
文字列、数値、リストと同様に、JavaScript オブジェクトから Earth Engine Dictionary を作成できます。構築時に、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 クラスが提供する静的メソッドを使用して作成します。(詳しくは、[ドキュメント] タブの「日付」セクションをご覧ください)。次の例は、文字列または 1970 年 1 月 1 日午前 0 時からのミリ秒数を表す JavaScript の日付から日付を作成する方法を示しています。
コードエディタ(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 オブジェクトの例に示すように、引数として渡されるオブジェクトは、再利用のために変数に保存できます。
これで、Earth Engine を使い始めるのに十分な JavaScript の知識が得られました。 JavaScript オブジェクトと Earth Engine オブジェクトの詳しい説明については、クライアントとサーバーのページをご覧ください。
次のセクションでは、Earth Engine で for ループ、if/else 条件、イテレーションを効果的に使用するための関数型プログラミングのコンセプトについて詳しく説明します。