Earth Engine REST API を使用したテーブル計算

注: REST API には、すべてのユーザーに適していない可能性のある新しい高度な機能が含まれています。Earth Engine を初めてご利用になる場合は、JavaScript ガイドから始めることをおすすめします。

Earth Engine REST API クイックスタートでは、Earth Engine アセットからピクセルのブロックにアクセスする方法について説明します。compute pixels の例では、結果を取得する前にピクセルに計算を適用する方法を示しています。この例では、FeatureCollection の各特徴の ImageCollection の各画像のピクセルの平均を取得する方法を示します。具体的には、これは computeFeatures エンドポイントに対する POST リクエストです。

始める前に

こちらの手順に沿って、次の操作を行います。

  1. Earth Engine に申し込む
  2. Google Cloud プロジェクトを作成する
  3. プロジェクトで Earth Engine API を有効にする
  4. サービス アカウントを作成する
  5. Earth Engine の計算を実行するプロジェクト レベルの権限をサービス アカウントに付与する

: このチュートリアルを完了するには、Earth Engine へのアクセスに登録されているサービス アカウントが必要です。続行する前に、こちらの手順に沿ってサービス アカウントを登録してください。

Google Cloud に対して認証を行う

まず、Google Cloud への認証済みリクエストを行うためにログインします。プロジェクトは同時に設定します。出力に表示される手順に沿ってログインを完了します。

# INSERT YOUR PROJECT HERE
PROJECT = 'your-project'

!gcloud auth login --project {PROJECT}

サービス アカウントの秘密鍵ファイルを取得する

Earth Engine を使用するために登録されたサービス アカウントがすでにあるはずです。お持ちでない場合は、こちらの手順に沿って取得してください。サービス アカウントのメールアドレスを次のセルにコピーします。(Earth Engine を使用するには、サービス アカウントがすでに登録されている必要があります)。次のセルでは、gsutil コマンドラインを使用して、サービス アカウントのキーファイルを生成します。鍵ファイルはノートブック VM に作成されます。

# INSERT YOUR SERVICE ACCOUNT HERE
SERVICE_ACCOUNT='your-service-account@your-project.iam.gserviceaccount.com'
KEY = 'key.json'

!gcloud iam service-accounts keys create {KEY} --iam-account {SERVICE_ACCOUNT}

AuthorizedSession を開始して認証情報をテストする

秘密鍵を使用して認証情報を取得し、秘密鍵をテストします。認証情報を使用して、HTTP リクエストを行うための認証済みセッションを作成します。セッションを介して GET リクエストを行い、認証情報が機能していることを確認します。

from google.auth.transport.requests import AuthorizedSession
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file(KEY)
scoped_credentials = credentials.with_scopes(
    ['https://www.googleapis.com/auth/cloud-platform'])

session = AuthorizedSession(scoped_credentials)

url = 'https://earthengine.googleapis.com/v1beta/projects/earthengine-public/assets/LANDSAT'

response = session.get(url)

from pprint import pprint
import json
pprint(json.loads(response.content))

計算をシリアル化する

計算をリクエストする前に、計算を Earth Engine 式グラフ形式にする必要があります。次の例は、式グラフを取得する方法を示しています。

Earth Engine に対する認証

サービス アカウントから Earth Engine のスコープ付き認証情報を取得します。これらを使用して Earth Engine を初期化します。

import ee

# Get some new credentials since the other ones are cloud scope.
ee_creds = ee.ServiceAccountCredentials(SERVICE_ACCOUNT, KEY)
ee.Initialize(ee_creds)

計算を定義する

クライアント API を使用して簡単な計算をプロトタイプします。計算結果は FeatureCollection です。計算がエラーなしで成功することを確認するには、最初の Feature(ポリゴンの平均 NDVI)から値を取得します。

# A collection of polygons.
states = ee.FeatureCollection('TIGER/2018/States')
maine = states.filter(ee.Filter.eq('NAME', 'Maine'))

# Imagery: NDVI vegetation index from MODIS.
band = 'NDVI'
images = ee.ImageCollection('MODIS/006/MOD13Q1').select(band)
image = images.first()

computation = image.reduceRegions(
  collection=maine, 
  reducer=ee.Reducer.mean().setOutputs([band]), 
  scale=image.projection().nominalScale()
)

# Print the value to test.
print(computation.first().get(band).getInfo())

式グラフをシリアル化する

これにより、Earth Engine 式グラフ(具体的には Expression)を表すオブジェクトが作成されます。通常、これらはクライアント API のいずれかを使用して構築する必要があります。

# Serialize the computation.
serialized = ee.serializer.encode(computation)

リクエストを送信する

computeFeatures エンドポイントに POST リクエストを送信します。リクエストには、シリアル化された計算である Expression が含まれています。

import json

url = 'https://earthengine.googleapis.com/v1beta/projects/{}/table:computeFeatures'

response = session.post(
  url = url.format(PROJECT),
  data = json.dumps({'expression': serialized})
)

import json
pprint(json.loads(response.content))

レスポンスには、他のアプリやプロセスで使用できる GeoJSON としての結果の FeatureCollection が含まれています。