JAXA環境情報提供システム(JPMAP)を使ってみた:APIとりあえずアクセス編

前回、JAXA環境情報提供システム(JPMAP)のGUIを触ってみました。

今回はJPMAPのAPIをとりあえずアクセスしてどんな感じか使ってみたいと思います。

環境情報提供システム(JPMAP)はこんなプラットフォーム
  • JAXAが提供する無料のデータプラットフォーム
  • ブラウザからのアクセス(GUI)とコマンドラインからのアクセス(API)に対応している
  • 任意の時間および場所の時系列の衛星データが取得できるオンラインシステム

ちなみに以前の記事(GUI編)は以下です。

目次

APIとは何か

API とは、アプリケーションやソフトウェアの構築と統合 (インテグレーション) に使われるツール、定義、プロトコルです。API は、Application Programming Interface (アプリケーション・プログラミング・インタフェース) の略です。
API を使用することで、他の製品やサービスの実装方法を知らなくても、利用中の製品やサービスをそれらと通信させることができます。また、API を使用するとアプリケーション開発をシンプルに行えるようになり、時間とコストを節約できます。新たなツールや製品を設計する場合も、利用中のものを管理する場合にも、API を使用することでシンプルかつ柔軟な運用が可能となるだけでなく、イノベーションを起こすチャンスにもつながります。
API の仕組みは、文書による合意や契約に例えられることがあります。これはつまり、一方が特定の方法で構成されたリモート要求を送信し、他方のソフトウェアは指定された方法で応答する、というものです。

https://www.redhat.com/ja/topics/api/what-are-application-programming-interfaces

要するに決められた要求を投げると、それに対応するような応答をしてくれるものになります。

今回のJPMAPのAPIは、いわゆるREST(REpresentational State Transfer)APIというもので、URLを指定した形で投げると、URLに含まれる条件でレスポンス(データ)を返してくれます。

ちなみにSOAP(SimpleObject Access Protocol)APIという、XML形式でリクエストを投げる形式もあります。RESTの場合はXML形式でレスポンス(データ)が返ってくるかは提供元次第ですが、SOAPの場合はXML形式でデータが返ってきます。

この辺は実際にAPIをみていくとよくわかりますので、JPMAPのAPIをみてみましょう。

JPMAP-APIリファレンスを確認する

JPMAPのAPIリファレンスを確認してみます。

まず、JPMAPのAPIのリクエストURLです。

https://www.jpmap-jaxa.jp/jpmap/api/v1/point/ #点検索
https://www.jpmap-jaxa.jp/jpmap/api/v1/rect/ #矩形検索
https://www.jpmap-jaxa.jp/jpmap/api/v1/region/ #行政界検索

これがリクエストの投げ先です。

なおJPMAPにはリクエスト時の地点の指定の仕方次第で3種類のリクエスト方法があるのでリクエスト先も3種類になっています。

  • 点検索:場所を点で指定してデータをリクエストする
  • 矩形検索:場所を範囲で指定してデータリクエストする
  • 行政界検索:行政界を指定してデータリクエストする

ではどんなデータが扱えるか見てみます。APIリファレンスの検索クエリの表に書いてあります。

JPMAP点検索APIの検索クエリ
出所:https://www.jpmap-jaxa.jp/jpmap/jp/api_reference/
JPMAP矩形検索APIの検索クエリ
出所: https://www.jpmap-jaxa.jp/jpmap/jp/api_reference/
JPMAP行政界検索APIの検索クエリ
出所: https://www.jpmap-jaxa.jp/jpmap/jp/api_reference/

product、interval、lat、lon、start、endをそれぞれ指定することができます。

これらを指定することにより、例えば「○○地点の△月から□月までの降水量(GSMaP)を日毎で取得」というようなリクエストをJPMAPに投げることができ、JPMAPからはこの条件に合うようなデータを返してくれます。

JPMAP-APIリクエストパラメータ

少しだけパラメータ内容を見ておきます。

プロダクトコード

どんなデータを返してほしいか、データの種類を指定するパラメータです。

以下のデータが指定できます。

  • 1: 降水量 [GSMaP]
  • 2: 正規化植生指数 [MODIS]
  • 3: 日射量 [MODIS]
  • 4: エアロゾル光学的厚さ [MODIS]
  • 5: 昼間 地表面温度 [Aqua/MODIS]
  • 6: 夜間 地表面温度 [Aqua/MODIS]
  • 7: 昼間 地表面温度 [Terra/MODIS]
  • 8: 夜間 地表面温度 [Terra/MODIS]
  • 9: 日射量 [Aqua/MODIS]
  • 10: 日射量 [Terra/MODIS]
  • 11: エアロゾル光学的厚さ [Aqua/MODIS]
  • 12: エアロゾル光学的厚さ [Terra/MODIS]
  • 13: 土壌水分 [AMSR-E/AMSR-2]
  • 14: 正規化植生指数 [GCOM-C SGLI]
  • 15: エアロゾル光学的厚さ [GCOM-C SGLI]
  • 16: 昼間 地表面温度 [GCOM-C SGLI]
  • 17: 夜間 地表面温度 [GCOM-C SGLI]

この番号が重要で、データ種類名を書くのではなく番号で指定します。

間隔コード

取得するデータ間隔を指定するパラメータです。

  • 1: 日毎
  • 2: 半月毎
  • 3: 月毎
  • 4: 8日毎

の4種類から選ぶことができます。

APIリファレンスに記載がありますが、間隔コードのパラメータはデータ種類(プロダクト)側で対応していない場合があります。リクエストする前に、データ概要に記載の表で確認しておく必要があります。
(例)降水量は8日毎のデータはリクエストできません。

緯度・経度

データを取得したい地点を指定するパラメータです。

点検索の場合はその地点の緯度経度を、範囲検索の場合は東西南北の緯度経度範囲を、行政界の場合は行政界IDを指定します。

開始日・終了日

データを取得したい期間を指定するパラメータです。

JPMAP-APIをとりあえず使ってみる

APIリファレンスに記載されているサンプルコードを使ってみます。

以下のコードをブラウザに入力して、以下のような画面が返ってきたらAPIから情報をが取得できています。

{ "product": { "code": 1, "name": "Rainfall [GSMaP]", "unit": "mm" }, "order": { "select": "point", "coordinate": [ 35.41, 139.41 ], "area": { "upperleft": [ 45.33, 122.55 ], "lowerright": [ 20.25, 153.59 ] } }, 
...

私は APIリファレンスに記載されている 以下のコードで試してみました。リクエストパラメータがリクエストURLに繋げられているのがわかります。

点検索API

https://www.jpmap-jaxa.jp/jpmap/api/v1/point/?product=1&lat=35.41&lon=139.41&interval=1&start=20201201&end=20201231

矩形検索API

https://www.jpmap-jaxa.jp/jpmap/api/v1/rect/?product=14&interval=3&nlat=45.33&wlon=122.55&slat=20.25&elon=153.59&start=20190101&end=20200131

行政界検索API

https://www.jpmap-jaxa.jp/jpmap/api/v1/rect/?product=14&interval=3&nlat=45.33&wlon=122.55&slat=20.25&elon=153.59&start=20190101&end=20200131

次はPythonで処理してみたい

ただアクセスするだけだとつまらないので、次は自分の好きなデータをとってきてグラフ化までやってみたいと思います。


おまけ:行政界IDの調べ方

行政界IDは以下のURLで調べられます。(これもAPIです)

まず、世界の行政界IDを調べます。

https://www.jpmap-jaxa.jp/jpmap/getregion/?regioncode=114

このURLをブラウザで打ってアクセスすると以下のような結果が返ってくるはずです。

regioncode,countryname 3,Aland islands 1,Afghanistan 2,Akrotiri and dhekelia 4,Albania 5,Algeria 
…
113,Jamaica 114,Japan 115,Jersey
…
252,Wallis and futuna 253,Western sahara 254,Yemen 255,Zambia 256,Zimbabwe

まず日本が114という国であることがわかりました。

続けて日本(114)を指定して調べます。同じ様に以下のURLにアクセスします。

https://www.jpmap-jaxa.jp/jpmap/getregion/?regioncode=114

すると以下のような結果が返ってきます。

1,Aichi 2,Akita 3,Aomori 4,Chiba 5,Ehime 6,Fukui 7,Fukuoka 8,Fukushima 9,Gifu 10,Gunma 11,Hiroshima 12,Hokkaido 13,Hyogo 14,Ibaraki 15,Ishikawa 16,Iwate 17,Kagawa 18,Kagoshima 19,Kanagawa 20,Kochi 21,Kumamoto 22,Kyoto 23,Mie 24,Miyagi 25,Miyazaki 26,Nagano 27,Nagasaki 28,Nara 29,Niigata 30,Oita 31,Okayama 32,Okinawa 33,Osaka 34,Saga 35,Saitama 36,Shiga 37,Shimane 38,Shizuoka 39,Tochigi 40,Tokushima 41,Tokyo 42,Tottori 43,Toyama 44,Wakayama 45,Yamagata 46,Yamaguchi 47,Yamanashi

これで県のIDがわかります。東京の場合は41になります。

先ほどのURLに東京のIDを追加したURLにアクセスします。

https://www.jpmap-jaxa.jp/jpmap/getregion/?regioncode=114_41

するとさらに以下のようなレスポンスがあります。

1614,Adachi 1615,Akiruno 1616,Akishima 1617,Ome 1618,Ota 1619,Arakawa 1620,Bunkyo 1621,Chuo 1622,Chofu 1623,Chiyoda 1624,Edogawa 1625,Fuchu 1626,Fussa 1627,Hachioji 1628,Hamura 1629,Higashikurume 1630,Higashimurayama 1631,Higashiyamato 1632,Hinode 1633,Hinohara 1634,Hino 1635,Inagi 1636,Itabashi 1637,Koto 1638,Katsushika 1639,Kita 1640,Kiyose 1641,Kodaira 1642,Koganei 1643,Kokubunji 1644,Komae 1645,Kunitachi 1646,Machida 1647,Meguro 1648,Minato 1649,Mitaka 1650,Mizuho 1651,Musashimurayama 1652,Musashino 1653,Nakano 1654,Nerima 1655,Nishitokyo 1656,Okutama 1657,Setagaya 1658,Shibuya 1659,Shinagawa 1660,Shinjuku 1661,Suginami 1662,Sumida 1663,Tachikawa 1664,Taito 1665,Tama 1666,Toshima

今度は東京都の市区町村に合わせたIDを確認することができます。

港区を指定する場合のIDは1648になりますので、URLも更新してアクセスしてみます。

https://www.jpmap-jaxa.jp/jpmap/getregion/?regioncode=114_41_1648

このURLにアクセスすると-1と返ってきますが、これはこれ以上細かい指定が出来ないことを示しています。