Python のインストール

Python のサポート

Earth Engine Python クライアント ライブラリは、Google Cloud でサポートされている Python バージョンと互換性があります。サポートは、Python ポイント リリース スケジュール(PEP 602Python バージョンのステータス)に従って毎年更新されます。サポートされていない Python バージョンを使用すると、認証エラー、予期しない動作、特定のオペレーションの失敗が発生する可能性があります。

インストール オプション

Google Colab を使用している場合、最新バージョンの Earth Engine Python クライアント ライブラリがすでに(pip 経由で)インストールされています。Earth Engine と Colab を使ってみるには、次のノートブックを試してください。

Colab を使用していない場合は、conda(推奨)または pip を使用して、Earth Engine クライアント ライブラリを手動でインストールしてシステムで更新できます。


pip を使用して、任意の Python 環境に API をインストールします。ターミナルまたはコマンド プロンプトから:

pip install earthengine-api

インストールが完了したら、こちらの説明に沿って Earth Engine API をインポート、認証、初期化できます。

API を更新します。

pip install earthengine-api --upgrade

パッケージのインポート

Python API パッケージは ee と呼ばれます。新しい Python セッションとスクリプトごとにインポートして初期化する必要があります。

import ee

認証と初期化

Earth Engine Python クライアント ライブラリを使用する前に、認証を行い、生成された認証情報を使用して Python クライアントを初期化する必要があります。実行します。

ee.Authenticate()

これにより、環境に最適な認証モードが選択され、スクリプトのアクセスを確認するよう求められます。初期化するには、所有しているプロジェクト、または使用するための権限があるプロジェクトを指定する必要があります。このプロジェクトは、すべての Earth Engine オペレーションの実行に使用されます。

ee.Initialize(project='my-project')

トラブルシューティングと、認証モードと Cloud プロジェクトの詳細については、認証ガイドをご覧ください。

Hello world!

以下は、Earth Engine の使用に必要な準備が整っていることを確認するための簡単なスクリプトです。

import ee
ee.Authenticate()
ee.Initialize(project='my-project')
print(ee.String('Hello from the Earth Engine servers!').getInfo())

構文

Python API と JavaScript API はどちらも同じサーバーサイド機能にアクセスしますが、言語構文の違いにより、クライアントサイド式(クライアントとサーバーについて)は異なる場合があります。次の表に、JavaScript API と比較して Python API を使用する際に発生する一般的な構文の違いを示します。

JavaScript と Python の一般的な構文の違い
プロパティ JavaScript Python
関数の定義
function myFun(arg) {
  return arg;
}

var myFun = function(arg) {
  return arg;
};
def my_fun(arg):
  return arg
匿名関数のマッピング
var foo = col.map(function(arg) {
  return arg;
});
foo = col.map(lambda arg: arg)
変数の定義
var myVar = 'var';
my_var = 'var'
論理演算子
var match = such.and(that);
var match = such.or(that);
var match = such.not(that);
match = such.And(that)
match = such.Or(that)
match = such.Not(that)
複数行のメソッド チェーン
var foo = my.really()
              .reallyLong()
              .methodChain();
foo = (my.really()
       .reallyLong()
       .methodChain())
ディクショナリ キー
var dic = {'key': value};
var dic = {key: value};
dic = {'key': value}
辞書オブジェクトへのアクセス
var value = dic.key;
var value = dic['key'];
value = dic['key']
関数の引数の定義
// Positional arguments.
var foo = fun(argX, argY, argZ);
// Keyword arguments object.
var foo = fun({y: argY});
# Positional arguments.
foo = fun(arg_x, arg_y, arg_z)
# Keyword arguments dictionary.
foo = fun(**{'y': arg_y})
# Keyword arguments.
foo = fun(x=arg_x, z=arg_z)
ブール値
var t = true;
var f = false;
t = True
f = False
Null 値
var na = null;
na = None
コメント
//
#

日付オブジェクト

datetime モジュールを使用して、クライアントサイドの日付オブジェクトを定義して操作します。スクリプトにモジュールを含めます。

import datetime

ee.Date をクライアントサイドの日付に変換します。

ee_date = ee.Date('2020-01-01')
py_date = datetime.datetime.utcfromtimestamp(ee_date.getInfo()['value']/1000.0)

クライアントサイドの日付を ee.Date: に変換

py_date = datetime.datetime.utcnow()
ee_date = ee.Date(py_date)

データのエクスポート

Python API を使用してデータをエクスポートするには、ee.batch モジュールを使用する必要があります。このモジュールは、Export 関数へのインターフェースを提供します。上記の構文の表に記載されている違いに注意しながら、JavaScript API と同様にパラメータ引数を渡します。エクスポート タスクは、定義済みタスクで start() メソッドを呼び出して開始する必要があります。タスクで status() メソッドを呼び出して、タスクのステータスをクエリします。次の例は、ee.Image オブジェクトをエクスポートする方法を示しています。

エクスポート タスクを作成します。

task = ee.batch.Export.image.toDrive(image=my_image,  # an ee.Image object.
                                     region=my_geometry,  # an ee.Geometry object.
                                     description='mock_export',
                                     folder='gdrive_folder',
                                     fileNamePrefix='mock_export',
                                     scale=1000,
                                     crs='EPSG:4326')

エクスポート タスクを開始します。

task.start()

エクスポート タスクのステータスを確認します。

task.status()

task.status() の結果は、タスクの状態や ID などの情報が含まれる辞書です。

{
  'state': 'READY',
  'description': 'my_export_task',
  'creation_timestamp_ms': 1647567508236,
  'update_timestamp_ms': 1647567508236,
  'start_timestamp_ms': 0,
  'task_type': 'EXPORT_IMAGE',
  'id': '56TVJIZABUMTD5CJ5YHTMYK4',
  'name': 'projects/earthengine-legacy/operations/56TVJIZABUMTX5CJ5HHTMYK4'
}

タスクの進行状況は state フィールドを使用してモニタリングできます。 state 値のリストタスクのライフサイクルの詳細については、処理環境のページをご覧ください。

オブジェクトの印刷

Python で Earth Engine オブジェクトを出力すると、オブジェクト自体ではなく、オブジェクトのシリアル化されたリクエストが出力されます。理由については、クライアントとサーバーのページをご覧ください。

Earth Engine オブジェクトで getInfo() を呼び出して、目的のオブジェクトをサーバーからクライアントに取得します。

# Load a Landsat image.
img = ee.Image('LANDSAT/LT05/C02/T1_L2/LT05_034033_20000913')

# Print image object WITHOUT call to getInfo(); prints serialized request instructions.
print(img)

# Print image object WITH call to getInfo(); prints image metadata.
print(img.getInfo())
getInfo() は同期オペレーションです。つまり、結果がクライアントに返されるまで、getInfo() 呼び出しに続く式の実行はブロックされます。また、大量のデータや費用のかかる計算のリクエストは、エラーを返したり、ハングしたりする可能性があります。一般に、結果をエクスポートし、完了したら新しいスクリプトにインポートしてさらに分析することをおすすめします。

UI オブジェクト

Earth Engine ui モジュールは、JavaScript API コードエディタでのみ使用できます。Python の UI 要素にはサードパーティ ライブラリを使用します。geemapFoliumipyleaflet などのライブラリはインタラクティブな地図表示を提供します。グラフ作成は、MatplotlibAltairseaborn などのライブラリで行うことができます。geemap と Matplotlib の使用例については、 Colab の Earth Engine 設定ノートブックをご覧ください。

デベロッパー ガイドの Python

Python コードは、Earth Engine デベロッパー ガイド全体に記載されています。コードサンプルが利用可能な場合は、コードブロックの上部にある [Colab(Python)] タブをクリックして表示できます。ガイドページの上部には、ページを Colab ノートブックとして実行したり、GitHub で表示したりするためのボタンが含まれていることもあります。Python コードの例は、Google Colab を使用して実行することを想定しています。インタラクティブな地図とオブジェクトの探索は、geemap ライブラリによって処理されます。Earth Engine Python クライアント ライブラリと geemap はどちらも Colab にプリインストールされています。

Earth Engine のセットアップ

Python コードを実行するには、Earth Engine ライブラリをインポートし、認証して初期化する必要があります。サンプルでは、次のコマンドを使用します(代替方法については、認証と初期化をご覧ください)。

import ee
ee.Authenticate()
ee.Initialize(project='my-project')

geemap を使用したインタラクティブなデータ探索

geemap ライブラリは、地図タイルの表示と、Earth Engine オブジェクトの豊富な表現の印刷に使用されます。このライブラリは、これらの機能についてそれぞれ ipyleafleteerepr に依存しています。geemap ライブラリとその依存関係は Google Colab にプリインストールされています。各セッションにインポートします。

import geemap.core as geemap

ee.Imageee.FeatureCollection などの地理的な Earth Engine データクラスは、geemap.Map オブジェクトを使用して表示できます。まず、マップ オブジェクトを定義します。次に、レイヤを追加するか、ビューポートを変更します。

# Initialize a map object.
m = geemap.Map()

# Define an example image.
img = ee.Image.random()

# Add the image to the map.
m.add_layer(img, None, 'Random image')

# Display the map (you can call the object directly if it is the final line).
display(m)