はじめに
前回環境構築を行ったので、まずは基本のデータの読み書きに挑戦してみます。Earth Engineでは自分のデータのことを「アセット」と呼ぶようです。
アセットの読み込み
既存のアセットの読み込み
Earth Engineにはすぐに使える様々なアセットが用意されています。このような既存のアセットを読み込むにはアセットのIDを知る必要があります。ここでは例としてJAXAが公開している「ALOS DSM: Global 30m」を読み込んでみます。まずは検索窓に「elevation Japan」と入力してアセットを検索し、ALOS DSM: Global 30m横のImportリンクをクリックしてインポートします。
アセットIDはアセット横の‣マークをクリックすると、id
のところに表示されます。
この場合はJAXA/ALOS/AW3D30_V1_1
がアセットIDになります。
アセットIDがわかったので以下の例のようにアセットを読み込むことができます。
import ee
ee.Initialize()
alos_dem = ee.Image("JAXA/ALOS/AW3D30_V1_1")
ベクターデータのアップロードと読み込み
今のところ、ベクターデータ(なぜかEarth Engine上での表記はTable)のアップロードはShapefileで行う必要があるようです。Code EditorからShapefileをアップロードするときには.shp、.dbf、.shxのファイルを同時にアップロードする必要があるようです。ファイル名に複数のピリオドが入っていると最初のピリオド以降を拡張子と判断するらしく、「変な拡張子のファイルをアップロードするでない」と怒られるので注意です。他にも.cpg、.prjなども同時にアップロードできるようです。
Shapefileの仕様のため、列名の最大長は10文字になります。Geodatabaseなどから変換するときには、長い列名はあらかじめわかりやすい列名に変更しておくとよさそうです。
アップロードしたデータを読み込むにはee.FeatureCollection
を使います。
import ee
ee.Initialize()
vector_data = ee.FeatureCollection("users/{USERNAME}/{ASSET_NAME}")
{USER_NAME}
は最初に指定したEarth Engine上のユーザー名、{ASSET_NAME}
はアセット名です。アセットがフォルダに入っている場合には
vector_data = ee.FeatureCollection(
"users/{USER_NAME}/{FOLDER_NAME}/{ASSET_NAME}"
)
です。
ラスターデータのアップロードと読み込み
今のところ、アップロードできるデータはGeoTiffとTFRecord+JSON(なんだそれ?)だそうです。サイズは最大10GBまで(使いたいデータが10GB以上あるんだけど、どうしようかな)。
データの読み込みには既存のアセットと同様にee.Image
を使います。
image = ee.Image("users/{USER_NAME}/{FOLDER_NAME}/{ASSET_NAME}")
アセットの書き出し
Earth Engine上のアセットへの書き出し
アセットをEarth Engine上のアセットとして書き出すにはee.batch
モジュールを使います。まずは書き出しタスクを作成し、それからタスクを実行、という二段階処理です。例として「ALOS DSM: Global 30m」の東京駅近辺をアセットとして書き出してみます。
# ライブラリ初期化。
import ee
ee.Initialize()
# ALOS DEMの読み込み。
alos_dem = ee.Image("JAXA/ALOS/AW3D30_V1_1")
# 書き出し範囲を作成。
region = [
[139.767, 35.681], [139.767, 35.691],
[139.777, 35.691], [139.777, 35.681]
]
# アセット書き出しのタスクを作成。
# scaleは解像度(m)。指定しないとオリジナルの値が使われる。
export_task = ee.batch.Export.image.toAsset(
image = alos_dem, description = "ALOS DEM Exporting Test",
assetId = "users/{USER_NAME}/TEST_ALOS_DEM", scale = 1,
region = region
)
# 書き出し実行。
ee.batch.data.startProcessing(export_task.id, export_task.config)
{USER_NAME}
は作成したユーザー名に読み替えてください。イメージの書き出し範囲はチュートリアルにあるee.Geometry.Rectangleを使う方法だとTypeError: Object of type Geometry is not JSON serializable
というエラーが発生したので、リストで書き出し範囲を指定してあります。これがPython 3を使っているからなのか、Python 2でも同じなのかはわかりません。
スクリプトを実行するとWeb上のCode EditorのTasksタブに書き出しタスクが追加され、しばらく待っているとアセット一覧にTEST_ALOS_DEM
というイメージが追加されるはずです。
Google Driveに保存
つづく?