Earth Engine オブジェクト

JavaScript に慣れたら、JavaScript オブジェクトとプリミティブを Earth Engine コンテナに格納してサーバーに送信し、Google で処理する方法を学びましょう。

文字列

たとえば、文字列を定義してから、Earth Engine に送信する ee.String() コンテナに入れます。

コードエディタ(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 オブジェクトのメソッドです。(コードエディタの左側にある [ドキュメント] タブを使用すると、すべての 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.Numberadd() メソッドを使用しようとすると、次のようなエラーが発生します。

これは get() 関数でよく見られます。この関数は、あらゆる種類の Earth Engine オブジェクトを返す可能性があります。これを修正するには、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 を返します。

日付

日付オブジェクトは、Earth Engine が時間を表す方法です。前の例と同様に、JavaScript の Date オブジェクトと Earth Engine の ee.Date オブジェクトを区別することが重要です。文字列、JavaScript の Date、または ee.Date クラスが提供する静的メソッドを使用して ee.Date を構築します。(詳細については、[Docs] タブの [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 条件、イテレーションを効果的に使用するための関数型プログラミングのコンセプトについて詳しく説明します。