「去年の梅雨、どの地域で雨が多かったのか」「拠点の周囲は、暑さや植生の変化にどれほどさらされているのか」。社内データにこうした環境の情報を重ねたいとき、衛星の観測データが使えます。ただし、巨大なファイルを探してダウンロードし、形式や座標をそろえるところで手が止まりがちです。
JAXA Earth API は、地球観測データを地域・期間・解像度で絞って取得するための仕組みです。Pythonで繰り返し処理したり、無料の地理情報ソフトQGISから地図として読み込んだりできます。この記事では、使えるデータの意味、QGISでの導入、実際に動かした降水データ取得コードまでをつなぎます。
きっかけは、2026年11月4日のINTERNET Watchの記事です。同記事は10月23日のMIERUNE MEETUP 2026 TOKYOでの紹介を扱っています。JAXA Earth APIが11月に初公開されたわけではありません。本稿は報道を入口に、JAXA公式サイトとAPI仕様・プラグイン資料を確認し、独自に取得手順を検証した活用編です。衛星データの全体像は連載第36回も参照してください。
① APIキーなしで取得できても、データごとの利用条件は別です。② 今回取得する降水データの単位は「mm/hr」、月の積算降水量「mm」ではありません。③ Pythonでの取得・GeoTIFF出力は実測しました。QGISの画面操作は公式手順を確認した解説で、この環境での操作実測ではありません。
何が便利なのか:必要な地域の測定値だけを取り出す
衛星画像を眺めるだけでなく、格子状に並んだ数値を取り出せる点が重要です。こうしたデータを「ラスタ」と呼びます。たとえば各マスに降水率を持たせれば、地域間の比較や、店舗・工場の位置に対応する値の抽出ができます。写真の色を人が読み取って数値化する必要はありません。
仕組みを支えるのが COG と STAC です。COG(Cloud Optimized GeoTIFF)は、位置情報を持つ画像ファイルを、必要な範囲や粗さの部分から読みやすくした形式。STAC(SpatioTemporal Asset Catalogs)は、「どこ・いつ・何のデータか」とファイルの所在を記した共通形式の目録です。JAXA Earth APIでは静的なCOGと目録を配信し、手元のPython/JavaScriptモジュールが必要な部分を取得します。サーバー上で自由な解析プログラムを実行するサービスとは役割が異なります。根拠は公式の仕組み説明です。
どんなデータがあり、仕事のどこで使えるか
公開対象はJAXAと関連機関のデータの一部です。100件以上という件数には、観測対象や集計期間などの違いも含まれます。「100種類の衛星がある」という意味ではありません。公式のデータセット案内と機械可読カタログで、欲しい対象と時間間隔を選びます。以下の用途は本稿の活用案であり、業務効果の実測ではありません。
| 対象 | 読み取れること/用途の例 | 選ぶときの注意 |
|---|---|---|
| GSMaPの降水率 | 地域の雨の分布。売上・出荷・屋外作業の記録に重ねる候補 | 今回の月平均製品は0.1度格子。月平均から1時間の豪雨は復元できない |
| 地表面温度(LST) | 地面などの表面の温度。広域の暑さの分布を比較 | このAPIの案内では約5km。天気予報の気温とは別。雲で欠損する |
| 植生指数(NDVI) | 植物の葉や活性度に関わる指標。季節や年の変化を追う | このAPIの案内では約5km。単一の小さな畑の収量や病害は直接分からない |
| 海面水温・クロロフィルa | 海の温度や植物プランクトンに関わる分布を見る | 製品により解像度、雲・沿岸の欠損、時間平均が異なる。魚の数そのものではない |
| 陸面の標高・土地被覆など | 地形や土地利用の分布を、拠点の周辺情報に加える | 対象地域、作成年、分類定義を確認。標高製品も地表面/地盤面などの違いに注意 |
同じ対象でも製品の選び方で答えが変わります。気候の地域差なら月平均、ある日の営業への影響なら日単位、短時間豪雨ならそれに対応した時間間隔の別製品が必要です。「最近のデータがある」と「リアルタイムに更新される」も別です。カタログ更新日だけで判断せず、選んだデータの対象日・公開遅延を確認します。
無料・登録不要でも、商用利用条件は確認する
公式案内では、現状はユーザー登録、APIキー発行、API利用回数の制限を設けていません。ただし、これはデータの権利や保証の話とは別です。データのライセンスは各STACで確認します。今回のGSMaP月平均コレクションは、license欄が「proprietary」で、JAXAの研究データ等の利用条件へのリンクを持っています。「proprietaryだから利用できない」とも、「無料だから無条件」とも読み替えません。
この条件は、出所としてJAXAとデータ名の表示を求め、商用利用も認めていますが、商用利用の場合は事前にJAXAへの連絡が必要と明記しています。またAPIの結果や組み込んだソフトウェアを公表する場合は、JAXA Earth APIを利用したことを明記する必要があります。今回の教材はAPIを使う原著コードのみ配布し、観測値やその加工地図は同梱しません。読者が取得したデータを業務で利用・配布する際は、自分の用途に合わせて最新の条件を確認してください。
例:提供:GSMaP(JAXA)。JAXA Earth APIを使用して取得し、当社で対象範囲の抽出と可視化を行った。対象期間・製品ID・取得日も併記すると、後から同じ条件で確認できます。別機関のデータを含む場合は、その機関の表示条件も確認します。
まずはQGISで試す:地図の範囲を選んでLoad
QGISは、位置情報を持つ画像・点・線・面を重ねて表示・分析するソフトです。Windows、macOS、Linux向けに提供されています。JAXA Earth APIのプラグインはMIERUNEが公開しており、JAXAのサイトにも利用手順があります。2026年11月5日の確認では、QGISプラグイン配布ページの安定版は2.1.4(2026年6月17日公開)でした。API本体とプラグインは別のソフトなので、版番号も異なります。
- 1JAXAのQGIS利用案内から導入の流れを確認し、QGISを用意する。公式案内は長期サポート版(LTR)を推奨しています。OSとプラグインの対応条件を確認してください。
- 2QGISの「プラグイン」→「プラグインの管理とインストール」で「JAXA」を検索し、JAXA Earth API Pluginをインストールする。表示言語によりメニュー名は異なります。
- 3プロジェクトの座標参照系をEPSG:4326またはEPSG:3857にする。プラグインのREADMEが指定する対応座標系です。EPSG:4326は経緯度、EPSG:3857はWeb地図で広く使われる投影法です。
- 4初回の地図が空白なら、ブラウザパネルの「XYZ Tiles」からOpenStreetMapを追加する(JAXAの公式手順もこの方法を案内)。背景地図を拡大して日本周辺へ移動し、プラグインを開く。背景を含む地図を公開する際は、OpenStreetMapなど背景側の出典表示・利用条件も確認する。Extentで「Map Canvas Extent」(表示範囲)または「Draw on Canvas」(地図上で範囲指定)を選ぶ。初回は広げすぎず、一地方でも構いません。
- 5データセットで「Precipitation Rate (Monthly)」、バンドで「PRECIP」を選ぶ。同名に近い平年値(Monthly Normal)と取り違えず、Detailsで製品を確認する。期間を2024年6月から7月にする。
- 6「Load」を押し、月ごとのラスタレイヤーを読み込む。レイヤーの表示・非表示を切り替え、凡例の単位を確認する。2か月を比較するなら色の最小値・最大値をそろえる。
- 7手元の拠点データなどを重ねる。位置がずれた場合は、元データの座標系とプロジェクトの座標系を確認する。違う座標系の数値を、宣言だけ変更して合わせようとしない。
以上はプラグインのREADMEとJAXAの画面付き手順を確認した説明です。本稿ではQGIS本体を起動しての動作検証は行っていません。またプラグインが選ぶ解像度は表示範囲などに依存し得るため、次のPython例と常に同じ画素数になるとは限りません。同じ格子で比較したい場合は、Python教材が出力するGeoTIFFをQGISへ読み込む方法もあります。
Pythonで再現する:2024年6・7月の降水率を取得
コードを残す方法は、毎月の更新や分析条件の共有に向いています。今回の実測では、Python 3.12.16とJAXA Earth API for Python 0.1.6を使い、次の条件で実際に取得しました。モデルの推論は行わないため、GPUや有料LLMの契約は不要です。インターネット接続とPythonの実行環境は必要です。
| 項目 | 今回の固定条件 |
|---|---|
| コレクション | JAXA.EORC_GSMaP_standard.Gauge.00Z-23Z.v6_monthly |
| バンド | PRECIP |
| 期間 | 2024-06-01T00:00:00 ~ 2024-07-31T23:59:59(UTC) |
| 範囲 | 西128度・南30度・東146度・北46度 |
| 座標参照系/解像度 | EPSG:4326/10 PPU(1度あたり10画素) |
| 取得結果の形 | 2か月 × 南北160画素 × 東西180画素 × 1バンド |
| メタデータの単位 | mm/hr(月平均の降水率) |
この範囲は日本周辺の長方形です。海や外国の一部を含み、沖縄や遠隔の島を含む日本全土を網羅する範囲でもありません。ここで平均を計算して「日本の平均降水量」とは呼べません。実測で確認したのは、取得した月・配列の形・単位と、出力ファイルの座標・数値の一致です。気象学的な精度検証や、観測点との比較は行っていません。
# macOS / Linux:Python 3.12 を用意した環境の例python3.12 -m venv .venv. .venv/bin/activatepython -m pip install -r requirements.txtpython fetch_rain.py取得部分の核は次のとおりです。公式Python API 0.1.6ドキュメントを基に、ダウンロード教材では入力確認、月の取り違え防止、GeoTIFF保存と読み戻し検査まで加えています。TLSの証明書検証は有効にしています。
from jaxa.earth import je
collection = "JAXA.EORC_GSMaP_standard.Gauge.00Z-23Z.v6_monthly"c = ( je.ImageCollection(collection, ssl_verify=True) .filter_date(["2024-06-01T00:00:00", "2024-07-31T23:59:59"]) .filter_resolution(10) .filter_bounds([128, 30, 146, 46]) # 西・南・東・北 .select("PRECIP") .get_images())print(c.raster.img.shape) # 今回の実測: (2, 160, 180, 1)print(c.cinfo[0].unit) # 今回の実測: mm/hrPPUはpixels per unitで、今回の経緯度座標では1度あたりの画素数です。10 PPUなら0.1度刻み。南北方向はおよそ11.1kmですが、東西方向の距離は緯度で変わります。10m解像度という意味ではありません。元のデータより細かい値を指定したり画像を拡大したりしても、観測情報が増えるわけではありません。
出力ファイルをどう読むか:数値・位置・色を分ける
| 出力 | 何に使うか |
|---|---|
| gsmap-2024-06.tif / gsmap-2024-07.tif | 月別の値とEPSG:4326の位置情報を持つGeoTIFF。QGISへ追加できる |
| rain-comparison.png | 同じ色の範囲で2か月を並べる確認図。経緯度軸付き、海岸線の重ね描きはない |
| metadata.json | 製品ID・期間・範囲・単位・取得日時・利用条件リンクを残す再現記録 |
教材はGeoTIFFを保存した後、読み戻した全画素の値が元と一致すること、座標参照系、北が上になる向き、左上画素の中心座標を確認します。地図の位置ずれは、画像が開けるだけでは検出できないためです。今回の実行ではこの検査が通りました。配布物には観測データを含めていないため、これらのファイルは読者が実行したときに生成されます。
PNGの2枚には同じカラースケールを使います。片方だけ最小値・最大値を自動調整すると、同じ色が違う数値を表し、増減を見誤るからです。欠損値はゼロにしません。教材では、この降水率製品で不正となる負値と非有限値を欠損として処理します。この処理を、負の温度が正しい値になる別製品へそのまま流用しないでください。
最も大事な読み違い:降水率と降水量は別
「Precipitation Rate (Monthly)」の値は、月平均の降水率です。単位のmm/hrは、時間あたりの雨の深さを表します。月に積もった総量mmと同じではありません。たとえば「月平均1 mm/hr」が30日間の全時間を欠損なく代表する、という仮の条件なら、1 × 24 × 30 = 720 mmという積算の関係になります。ただし、これは単位の説明用の架空例で、今回の観測結果ではありません。
実際に月積算へ換算する前には、元製品の平均の定義、欠損時間の扱い、月の日数、時刻境界を確認します。本教材は平均降水率のまま保存し、月積算を自動計算しません。また月平均の大小から「この日に豪雨があった」「この町で洪水が起きる」とは結論できません。短時間のピークや被害を調べるには、時間間隔の合う降水製品、地形、河川、実際の被害記録などを合わせます。
地表面温度は、地面などの表面の温度です。人の高さ付近で測る気温とは別で、観測時刻や雲による欠測も効きます。NDVIは植生に関わる指標ですが、その値だけで収量・樹種・病気を確定できません。測定対象と、仕事で知りたい答えの間にある推論を省かないことが大切です。
社内データに重ねるなら、まず1つの問いに絞る
最初の実務案は「店舗の月次来店数と、その周辺の月平均降水率を並べる」です。使うデータは、店舗ID、緯度・経度、対象月、来店数。店舗の点が入る格子の値を取り、同じ月で結合します。これだけで、雨の多寡と来店の変化が一緒に動いているかを確かめる入口になります。ただし因果関係を示す設計ではありません。
- 1地点の緯度・経度と、社内指標の月の区切りをそろえる。日本時間の営業月とUTCの観測集計には境界の差があることを記録する。
- 2同じ製品・版・解像度で取得する。欠損数も残し、欠損を来店ゼロや雨ゼロに変換しない。
- 3店舗の点から格子値を抽出するか、商圏の面で集計するかを決める。どちらを選んだかで代表する範囲が変わる。
- 4曜日構成、祝日、販促、休業、店舗の改装など、雨以外の変化も確認する。数か月の相関だけで売上予測や出店判断を確定しない。
面で平均する場合にも注意があります。経緯度格子は高緯度ほど東西方向が狭くなるため、単純な画素平均は面積平均と同じではありません。広域の面積平均なら面積の重みや適切な投影法を検討します。行政区や商圏との対応づけは点を面に割り当てる解説、雲による欠損は期間合成の解説も役立ちます。
LLMには、データの意味を守るための条件も渡す
JAXAはAIに渡せるMarkdown形式のデータカタログとPython API資料を公開しています。LLMにライブラリ名だけを伝えるより、利用する版の資料と目的を渡すほうが、存在しない製品IDや関数を提案されるリスクを減らせます。それでも回答は実行とメタデータで確認します。社内の住所や実績を渡さず、架空の拠点でコードだけ作る方法もあります。
添付したJAXA Earth APIのカタログとPython 0.1.6の資料だけを根拠に、取得コードを作ってください。
目的:2024年6月と7月の日本周辺の月平均降水率を比較する。
製品:JAXA.EORC_GSMaP_standard.Gauge.00Z-23Z.v6_monthly
バンド:PRECIP。範囲:西128、南30、東146、北46。10 PPU。
条件:
- 製品ID、期間、バンド、単位、座標系、利用条件を実レスポンスで検査する。
- mm/hrを月積算mmと呼ばない。欠損はゼロにしない。
- 日本周辺の矩形を「日本の全国平均」と呼ばない。
- 2か月の図の色範囲を統一する。
- GeoTIFFの座標と北が上になる向きを検査する。
- APIキーや有料サービスを追加せず、TLS証明書検証を無効化しない。
- 存在しないIDや設定を推測しない。不明点は不明と示す。
実行前は「手順案」、実行後は実際のログで確かめた結果だけを報告してください。つまずいたときの確認先
| 症状 | 先に確認すること |
|---|---|
| データが返らない | 対象製品の空間・時間範囲に入っているか。緯度経度の順序、開始・終了日、バンド名 |
| 時間がかかる/メモリを使う | まず範囲と期間を小さくする。不要な高解像度や全球一括取得を避ける |
| 地図がずれる/上下逆 | 元データのCRS、経緯度の順序、ラスタ左上の位置、画素サイズの符号 |
| 同じ色なのに印象が違う | 凡例の最小・最大、単位、期間、欠損の色がそろっているか |
| SSL証明書のエラー | Python環境や組織ネットワークのCA証明書を確認。検証を無効化して解決扱いにしない |
| 資料と画面が違う | QGIS・プラグイン・APIの版を記録し、それぞれの最新資料を確認 |
最初の到達点は、たくさんのデータを集めることではなく、「この製品の、この期間・範囲・単位の値を、同じ条件で再取得できる」ことです。そこまでそろえば、地図は見栄えのよい画像から、業務の問いを検証する材料へ変わります。
確認日・出典・検証範囲
確認日:2026年11月5日。Python API 0.1.6、QGISプラグイン配布情報2.1.4を確認。Python 3.12.16で2024年6・7月の実データ取得、月・単位・配列形状の検査、GeoTIFFの読み戻しと座標検査、比較PNGの生成を実施しました。不正な範囲は取得前にエラーにすることも検証しています。QGISのGUI操作、店舗データとの結合による効果検証、観測精度の独立検証は行っていません。
主な一次資料:JAXA Earth API/Python 0.1.6/対象GSMaPのSTAC/QGIS手順/MIERUNEプラグイン/研究データ等の利用条件。本稿の教材はJAXA Earth API for Pythonを利用しています。