Python のサポート
Earth Engine Python クライアント ライブラリは、Google Cloud でサポートされている Python バージョンと互換性があります。サポートは、Python ポイント リリース スケジュール(PEP 602、Python バージョンのステータス)に従って毎年更新されます。サポートされていない Python バージョンを使用すると、認証エラー、予期しない動作、特定のオペレーションの失敗が発生する可能性があります。
インストール オプション
Google Colab を使用している場合、最新バージョンの Earth Engine Python クライアント ライブラリがすでに(pip 経由で)インストールされています。Earth Engine と Colab を使ってみるには、次のノートブックを試してください。
Colab を使用していない場合は、conda(推奨)または pip を使用して、Earth Engine クライアント ライブラリを手動でインストールしてシステムで更新できます。
パッケージのインポート
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 |
---|---|---|
関数の定義 |
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 要素にはサードパーティ ライブラリを使用します。geemap、Folium、ipyleaflet などのライブラリはインタラクティブな地図表示を提供します。グラフ作成は、Matplotlib、Altair、seaborn などのライブラリで行うことができます。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 オブジェクトの豊富な表現の印刷に使用されます。このライブラリは、これらの機能についてそれぞれ ipyleaflet
と eerepr
に依存しています。geemap
ライブラリとその依存関係は Google Colab にプリインストールされています。各セッションにインポートします。
import geemap.core as geemap
ee.Image
や ee.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)