6. PythonによるローカルからのGEE実行

腱鞘炎をスマートに避ける

前回は衛星元データのダウンロードをやりましたが、Google Driveにデータを吐き出す際、タスクを一つ一つ「RUN」する手間がありました。多数のデータをダウンロードしたい場合、これでは非効率です。

何とか楽をする方法はないものか。あります。pythonを使うことです。

これまでGEEの実行はクラウドベースで、JavaScriptを使って行ってきました。しかしpythonを使うと、GEEのコードエディタを立ち上げることなく、あたかもローカルにGEEの解析環境があるかのごとくコードを実行することが可能です。環境の設定がやや面倒なのと、Map.やExport.などのいくつかのコマンド(GEEコードエディタありきのコマンド)が使えないため、入門段階では紹介されないことが多いのですが、pythonを使うとタスクの管理が劇的に楽になります(というか今のところ、筆者はそれ以外の目的には使っていません。機械学習との連携とか地図描画とかにも使えそうですね)。

というわけで、まずは環境の設定からです。


PythonベースのGoogle Earth Engine実行

python3系列のほうが無難です。pipを用いて必要なAPIをインストールし、端末からGEEアカウント認証を行います。

(2022.06追記) 現在ではearthengine authenticateを行う前にgcloudの有効化が必要なようです。詳しくは公式のページをご覧ください。

(2024.01追記) 現在ではgcloudのcloud projectの事前作成が必要になりました。こちらのページなどに詳しいです。

$はbashコンソールを表します。上記はlinux環境が前提ですが、それ以外のOSでもよしなにやってください。上記のスクリプト実行により、webで認証コードが表示されるはずですので、端末にコピペしますと認証完了です。

では各自の環境でpythonを立ち上げてください。私はipythonを使っています。

pythonのインストールや文法自体は、入門書や入門サイトが無数にあると思いますので、そちらをあたってください。さて、pythonコンソール上でGEEを実行するには、次のおまじないが必要です。

とくにee.Initialize()は忘れがちなので気をつけてください。これで、Map.やui.Chartなどの、Chromeブラウザ立ち上げ前提の一部の機能を除き、ほとんどのオブジェクト/メソッドがこれまでと「ほぼ」同じように使えます(もちろん文法はpython)。「ほぼ」というのが厄介でして、微妙な仕様の違いがあったりしますので、デバッグに手間取ることしばしばです。

さておき、前回の一括データダウンロードスクリプトを、python版に書き換えて実行してみることにしましょう。以下のようになります。

変更部分を順に解説していきます。

版のExportの場合、regionは、[[x1,y1],[x2,y2],[x3,y3],[x4,y4]]というように四隅の座標を与えなくてはいけません。

このスクリプトを動かせば、前回同様にGoogleDriveの'Cambodia'フォルダの中にほしい衛星画像が自動で吐き出されます。しかも今回はRUNのクリック不要。だいぶ楽になりましたね。GEEのブラウザ版を立ち上げて「Task」タブを見てみると、タスクが走りだしたのがわかると思います。.getInfo()によってChromeブラウザが止まったりもしないようです。


さらに高度な処理をしたい場合、画像のメタデータがほしいこともあるかもしれません。そういう時はee.batch.Export.table.toDrive()関数を使って、必要なメタデータを格納したFeatureCollectionを吐き出すことで対応します。以下は特定のシーンに対して、画像と、太陽の分光放射照度・太陽と衛星の幾何情報などのメタデータを吐き出すスクリプトの例です。

蛇足ですが吐き出したメタデータを使い,6Sという放射伝達コードを使って大気補正をやってみました。こんな感じです:

補正前

補正後

今回はpythonによるローカル環境からのGEE実行を取り上げました。ローカルとクラウドの垣根がなくなったようで筆者的には「おおー」と思いましたがどうでしょうか。まあChromeブラウザの環境で十分な方は無理にpython化する必要はありませんが、意外と入門的な情報がネットになかったので、お役にたてば幸いです。