LoginSignup
1
1

More than 5 years have passed since last update.

Google Earth EngineのPython APIを使おう - その2:アセットの読み書き

Last updated at Posted at 2019-03-06

はじめに

前回環境構築を行ったので、まずは基本のデータの読み書きに挑戦してみます。Earth Engineでは自分のデータのことを「アセット」と呼ぶようです。

アセットの読み込み

既存のアセットの読み込み

Earth Engineにはすぐに使える様々なアセットが用意されています。このような既存のアセットを読み込むにはアセットのIDを知る必要があります。ここでは例としてJAXAが公開している「ALOS DSM: Global 30m」を読み込んでみます。まずは検索窓に「elevation Japan」と入力してアセットを検索し、ALOS DSM: Global 30m横のImportリンクをクリックしてインポートします。

elevation Japanの検索

アセットIDはアセット横の‣マークをクリックすると、idのところに表示されます。
この場合はJAXA/ALOS/AW3D30_V1_1がアセットIDになります。

アセット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に保存

つづく?

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1