遅延実行

クライアントとサーバーのドキュメントでは、スクリプトで参照されるオブジェクトをクライアントサイドまたはサーバーサイドにする方法について説明しています。完全なスクリプトには、使用するオブジェクトだけでなく、それらをどのように処理するかを Earth Engine に指示する一連の手順も含まれています。このドキュメントでは、これらの指示が Google に送信されて処理される方法と、結果がクライアントに送り返されて表示される仕組みについて説明します。

Earth Engine でスクリプト(JavaScript または Python)を記述しても、そのコードは Google の Earth Engine サーバーで直接実行されません。代わりに、クライアント ライブラリがスクリプトを一連の JSON オブジェクトにエンコードし、オブジェクトを Google に送信してレスポンスを待ちます。各オブジェクトは、特定の出力(クライアントに表示する画像など)を取得するために必要な一連のオペレーションを表します。たとえば、次のコードについて考えてみます。

コードエディタ(JavaScript)

var image = ee.Image('CGIAR/SRTM90_V4');
var operation = image.add(10);
print(operation.toString());
print(operation);

Python の設定

Python API とインタラクティブな開発で geemap を使用する方法については、 Python 環境のページをご覧ください。

import ee
import geemap.core as geemap

Colab(Python)

image = ee.Image('CGIAR/SRTM90_V4')
operation = image.add(10)
print(operation)
print(operation.getInfo())

最初の print ステートメントは、クライアント ライブラリが Google のサーバーにその画像を記述するために使用する JSON 構造を出力します。

ee.Image({
  "type": "Invocation",
  "arguments": {
    "image1": {
      "type": "Invocation",
      "arguments": {
        "id": "CGIAR/SRTM90_V4"
      },
      "functionName": "Image.load"
    },
    "image2": {
      "type": "Invocation",
      "arguments": {
        "value": 10
      },
      "functionName": "Image.constant"
    }
  },
  "functionName": "Image.add"
})
    

2 番目の print ステートメントは、リクエストを Google に送信し、Google サーバーからの POST レスポンスを出力します。レスポンスの JSON をすべて表示するには、コンソールの右側にある、出力されたオブジェクトの横にある JSON リンクをクリックします。

{
  "type": "Image",
  "bands": [
    {
      "id": "elevation",
      "data_type": {
        "type": "PixelType",
        "precision": "int",
        "min": -32758,
        "max": 32777
      },
      "crs": "EPSG:4326",
      "crs_transform": [
        0.0008333333535119891,
        0,
        -180,
        0,
        -0.0008333333535119891,
        60
      ]
    }
  ]
}
    

リクエストがない限り、Google に送信されて処理されることはありません。この例では、サーバー オブジェクトに対する getInfo() 呼び出しの結果を出力すると、リクエストがトリガーされます。その結果が明示的にリクエストされるまで、サーバーで処理は行われません。JavaScript Code Editor の print() は、非同期の getInfo() 呼び出しをラップする特別なクライアントサイド関数です。Python の場合は、直接呼び出します。

何かをリクエストする別の例として、Code Editor または geemap 地図要素に表示する方法があります。このリクエストが Google に送信されると、Code Editor または geemap 地図要素に結果を表示するために必要なタイルのみが返されます。具体的には、地図の位置とズームレベルによって、どのデータが処理され、地図に表示できる画像に変換されるかが決まります。パンまたはズームすると、他のタイルは遅延計算されます。このオンデマンド システムでは、並列処理と効率的な処理が可能になりますが、地図に表示される画像は、地図のズームレベルと地図境界の位置に応じて異なる入力から生成されます。計算への入力がリクエストからどのように決定されるかについては、スケールのドキュメントをご覧ください。