💭

JAXA Earth API for Pythonで遊んでみた

2023/11/05に公開

前置き

https://data.earth.jaxa.jp/ja/
JAXAさんが地球観測のデータセットを公開していて、無償で利用できることを知りました。
ページの下の方にある「ご利用条件」に遵守して、いろいろやってみます。

目標:とりあえず九州の観測データを出してみる。

準備

https://data.earth.jaxa.jp/api/python/quick.html

実践

地表面温度データ

https://data.earth.jaxa.jp/api/python/examples1.html#set-region-of-interest-by-bbox

こちらのコード例をもとに、最新の九州の地表面温度データを出してみることにします。
緯度経度の範囲を変えるため、変数bboxの値を変更しました。
変更前:bbox = [110, 20, 160, 50]
変更後:bbox = [129, 31, 132, 34]

緯度経度の座標はGoogleマップで確認できます。
マップ上の任意の場所で右クリックするだけ。


画像:JAXA Earth APIを利用して作成

データの粒度を細かくするため、変数ppu (Pixels Per Unit)を5から20に変更しました。
20より大きい値を入れても変わりませんでしたが、十分九州っぽくなりました。


画像:JAXA Earth APIを利用して作成

最後に最新日付のデータを出すため、変数dlimの値を変更しました。
が、2021年のままでデータが変わりませんでした。
指定されているデータセットが2021年までのものだったので、別のデータセットを指定することにしました。

各データセットには長めのIDとBANDがあるので、API Referenceを参照してImageCollectionにID、selectにBANDを指定することで上手くいきました。
コード例ではIDの一部みたいなパラメータ(kw = ["Aqua","LST","half-monthly"]の部分)が使われているのですが、これが何なのかは分かりそうで分かりませんでした。

最終的に書けたコードがこちら。

# Load module
from jaxa.earth import je

# Set query parameters
dlim = ["2023-11-02T00:00:00","2023-11-02T23:59:00"]
ppu  = 20
bbox = [129, 31, 132, 34]

# Get an image
data = je.ImageCollection("JAXA.G-Portal_GCOM-C.SGLI_standard.L3-LST.daytime.v3_global_daily",ssl_verify=True)\
         .filter_date(dlim=dlim)\
         .filter_resolution(ppu=ppu)\
         .filter_bounds(bbox=bbox)\
         .select("LST")\
         .get_images()

# Process and show an image
img = je.ImageProcess(data)\
        .show_images()

11月4日時点で11月2日までのデータが取れました。


画像:JAXA Earth APIを利用して作成

(11月12日追記)
11月10日のデータを取ろうとしたら欠落していました。
そういえばこの日は雨が降ったので、天気が悪い(曇が濃い?)とこういう感じになるみたいです。


画像:JAXA Earth APIを利用して作成

標高データ

https://data.earth.jaxa.jp/api/python/examples1.html#extract-bits-equal-data-pixels

コード例では千葉県の標高データが表示されるので、九州が表示されるように変数bboxの値だけ変えました。

# Load module
from jaxa.earth import je

# Set query parameters
kw   = ["AW3D"]
dlim = ["2019-01-01T00:00:00","2021-02-01T00:00:00"]
ppu  = 360
# bbox = [129.63, 30.92, 132.24, 34.06]
bbox = [129, 31, 132, 34]
mq   = "bits_equal"
val  = [0,0,0,0,0,0,0,0]

# Get information of collections,bands for data
collections,bands = je.ImageCollectionList(ssl_verify=True)\
                          .filter_name(keywords=kw)

# Get an image for data
data_d = je.ImageCollection(collection=collections[0],ssl_verify=True)\
           .filter_date(dlim=dlim)\
           .filter_resolution(ppu=ppu)\
           .filter_bounds(bbox=bbox)\
           .select(band="DSM")\
           .get_images()

# Get an image for mask
data_m = je.ImageCollection(collection=collections[0],ssl_verify=True)\
           .filter_date(dlim=dlim)\
           .filter_resolution(ppu=ppu)\
           .filter_bounds(bbox=bbox)\
           .select(band="MSK")\
           .get_images()

# Process and show an image
img = je.ImageProcess(data_d)\
        .mask_images(data_m,method_query=mq, values=val)\
        .show_images()


画像:JAXA Earth APIを利用して作成

最後に

地球観測データでプログラミングができるのはいいですね。
データセットの指定方法で謎は残ってしまいましたが、、QGIS(調べるとオープンソースの地理情報システムとのこと)のサンプルもあるので、まだまだ試しがいがありそうです。

Discussion