JAXA Earth APIとGradioで衛星データの取得・可視化アプリを作る

初めに

JAXA Earth API は、JAXA保有するCOG/STAC形式の地球観測衛星データにPythonからアクセスできるライブラリです。降水量、標高、植生指数、海面水温など多様な衛星データをプログラムから取得・処理・可視化できます。

今回、このAPIを使って衛星データを手軽に閲覧できるGradioアプリを作りました。以下の5つのタブで構成されています。

  1. コレクション検索 - 利用可能なデータセットの検索
  2. 衛星画像ビューア - 衛星画像の取得・表示
  3. 時系列解析 - 複数日の統計処理
  4. 差分解析 - 2時期のデータ比較
  5. マスキング - マスクデータによるフィルタリング

GitHubリポジトリは以下で公開しています。

github.com

開発環境

項目 バージョン
OS Windows 11
Python 3.13.8
uv 0.9.2
jaxa-earth 0.1.5
Gradio 6.5.1

環境構築

pyproject.tomlJAXA のパッケージインデックスを設定します。

[project]
name = "jaxa-earth-data"
version = "0.1.0"
description = "JAXA Earth Data Gradio Viewer"
requires-python = ">=3.13"
dependencies = [
    "gradio",
    "matplotlib",
    "pandas",
    "numpy",
    "jaxa-earth",
]

[tool.uv]
[[tool.uv.index]]
name = "jaxa"
url = "https://data.earth.jaxa.jp/api/python/repository/"

[tool.uv.sources]
jaxa-earth = { index = "jaxa" }

jaxa-earthPyPIではなくJAXA独自のリポジトリで配布されているため、[tool.uv] でインデックスを追加し、[tool.uv.sources] でパッケージの取得元を指定しています。

インストールは以下のコマンドで完了します。

uv sync

JAXA Earth API の基本的な使い方

JAXA Earth APIImageCollectionListImageCollectionImageProcess のパイプラインでデータを取得・処理します。

from jaxa.earth import je

# 1. コレクション検索
icl = je.ImageCollectionList()
collections, bands = icl.filter_name(keywords=["GSMaP"])

# 2. データ取得(メソッドチェーン順序は固定)
ic = je.ImageCollection(
    collection="JAXA.EORC_GSMaP_standard.Gauge.00Z-23Z.v6_daily"
)
ic.filter_date(dlim=["2021-07-01T00:00:00", "2021-07-03T00:00:00"])
ic.filter_resolution(ppu=4)
ic.filter_bounds(bbox=[130.0, 30.0, 145.0, 45.0])
ic.select(band="PRECIP")
ic.get_images()

# 3. 画像処理・可視化
ip = je.ImageProcess(data=ic)
ip.show_images(cmap="turbo", clim=[0, 20])

注意: ImageCollection のメソッド呼び出し順序は filter_datefilter_resolutionfilter_boundsselectget_images で固定です。順序を変えるとエラーになります。

主なパラメータは以下の通りです。

  • collection: データセットID(例: JAXA.EORC_GSMaP_standard.Gauge.00Z-23Z.v6_daily
  • ppu (Pixels Per Unit): 解像度を指定(値が大きいほど高解像度)
  • bbox: 取得範囲を [min_lon, min_lat, max_lon, max_lat] で指定
  • cmap: カラーマップ(turbo / ndvi / spectral

機能紹介

コレクション検索

キーワードを入力して利用可能なデータセットを検索できます。空欄で検索すると全コレクションを一覧表示します。

衛星画像ビューア

20種類以上のプリセットデータセットから選択し、衛星画像を取得・表示します。Collection ID、バンド、日時範囲、解像度、取得範囲などのパラメータを自由に変更可能です。

GSMaPの日次降水量データを取得した例です。日本周辺の降水量分布が可視化されています。

時系列解析

複数日のデータを取得し、平均・最大・最小・標準偏差・中央値の統計処理を実行します。統計画像と空間統計グラフを同時に表示し、統計データテーブルも確認できます。

降水量データの時系列平均を算出した例です。統計画像・空間統計グラフ・データテーブルが表示されます。

差分解析

2つの期間のデータを比較し、差分を可視化します。例えば、2020年と2021年の降水量の差分を確認する、といった使い方ができます。

2020年と2021年の夏季降水量(月次GSMaP)を比較した例です。期間1(参照)・期間2(比較)・差分の3つの画像が並んで表示されます。

マスキング

マスクデータを使ってデータをフィルタリングします。例えば、標高データにマスクを適用して特定の領域のみを表示できます。マスク手法は values_equal / range / bits_equal から選択可能です。

AW3D30標高データにマスクを適用した例です。マスク前後の画像を並べて比較できます。

実行

以下のコマンドでアプリを起動します。

uv run python app.py

ブラウザで http://localhost:7861 にアクセスするとアプリが表示されます。

参考