前回、JAXA環境情報提供システム(JPMAP)のGUIとAPIを触ってみました。
今回はJPMAPのAPIをPythonから呼び出して便利に使ってみたいと思います。
- JAXAが提供する無料のデータプラットフォーム
- ブラウザからのアクセス(GUI)とコマンドラインからのアクセス(API)に対応している
- 任意の時間および場所の時系列の衛星データが取得できるオンラインシステム
目次
作成したPythonコード
というわけでJPMAPのデータを使いやすくするために簡単なPythonコードを書いてみました。
本記事では前半はこのコードの使い方を記載しようと思います。コード自体の解説は別記事でまとめます。
ちなみにこのコードは点検索、矩形検索、行政界検索も動作確認しています。
ディレクトリは以下のようになっています。
.
├── LICENSE
├── README.md
├── config.ini #設定ファイル
├── downloads #出力データ格納先
│ ├── data.csv
│ └── data.png
└── main.py #プログラム本体
Pythonコードの使い方
仮想環境の構築
こちらのコードを使うには以下のライブラリが必要です。
- API関連
- requests
- 設定管理
- configparser
- その他(比較的一般的なPythonライブラリ)
- pandas
- matplotlib
- numpy
- scipy
Anacondaを使う場合は以下のように環境構築をしていきます。
まずbase環境をコピーしてcondaの環境を作ります。(今回はapiという仮想環境を作成)
conda create -n api --clone base
必要なライブラリをインストールしていきます。
conda install -c anaconda requests
conda install -c anaconda configparser
ちなみにこれ以外が元々入っていない場合は以下のコードで取得できます。
conda install -c anaconda panda
conda install -c conda-forge matplotlib
conda install -c anaconda numpy
conda install -c anaconda scipy
仮想環境の作成する手順(コマンド)は執筆時点のものなので、最新のインストール用コマンドはANACONDA.ORGで調べた方が無難です。
リポジトリのクローン
リポジトリを任意の位置にクローンもしくはダウンロードしてきます。
クローンしてくる場合は以下のようなコマンドです。
git clone git@github.com:kazushi-fa/JPMAP-API.git
設定ファイルの更新
リポジトリ をクローンするかダウンロードしてくると、JPMAP-API/config.ini
という設定ファイルがありますので、こちらを好きなように設定していきます。
このあたりは設定を変える必要はないです。
[JPMAP]
API_URL_POINT = https://www.jpmap-jaxa.jp/jpmap/api/v1/point/
API_URL_AREA = https://www.jpmap-jaxa.jp/jpmap/api/v1/rect/
API_URL_AREA_CODE = https://www.jpmap-jaxa.jp/jpmap/api/v1/region/
[SETTING]
と書かれている部分は、取得したいデータによって設定していく必要がありますので、以下を参考にしてください。
API種類の指定
対象とするAPIの種類を指定します。例えば点検索をする場合はAPI_TYPE = 0
という感じで設定します。;以下はコメントで、設定値をメモしてありますので、それを参考にすればよいです。
API_TYPE = 0
; 0: 点検索
; 1: 矩形検索
; 2: 行政界検索
衛星プロダクト種類の指定
次にAPIを使ってとってくる衛星プロダクトの種類を指定します。 降水量 [GSMaP] を指定する場合はPRODUCT = 1
という感じで指定します。
PRODUCT = 1
; 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]
プロダクト頻度の指定
取得するプロダクトの頻度を指定します。半月毎ならINTERVAL = 2
という風に指定します。
INTERVAL = 2
; 1: 日毎
; 2: 半月毎
; 3: 月毎
; 4: 8日毎
データ期間の指定
取得するデータの期間を指定します。私は2019年7月~2020年7月までの1年間を指定してみました。
START_DATE = 20190701
END_DATE = 20200701
記載が見当たらなかったのですが一回のAPIリクエストで取得できるのは最大二年間のようです。(プロダクトによって違うかもしれません)
出力するデータ名の指定
出力するデータファイルの名前を指定します。デフォルトではdata
という名前で出力されるようになっています。
SAVE_FILE_NAME = data
API種類毎のエリア指定
APIで取得してくるデータの場所を指定します。
例に出てくる緯度経度は例示しているだけで、特に意味はありません。
点検索の場合
点検索の場合は緯度経度でピンポイントで指定します。
[POINT] ; 点検索の設定
POINT_LAT = 35.41
POINT_LON = 139.41
矩形検索の場合
矩形検索の場合は最大最小の緯度経度(実質四隅の緯度経度)を指定します。
[AREA] ; 矩形検索の設定
AREA_NLAT = 45.33
AREA_WLON = 122.55
AREA_SLAT = 20.25
AREA_ELON = 153.59
行政界検索の場合
行政界検索の場合はコードを入力します。
[AREA_CODE] ; 行政界の設定
AREA_CODE_1 = 114
AREA_CODE_2 = 41
行政界コードの検索については以下の記事を参照してください。
コードの実行
コードを実行します。main.py
の格納されているディレクトリに移動して、先ほど作成したapiという名前のpython環境で実行します。
conda activate api
python main.py
実行すると以下のようなアクセス先URLが端末に出力されます。
https://www.jpmap-jaxa.jp/jpmap/api/v1/point/?product=1&lat=35.41&lon=139.41&interval=2&start=20190701&end=20210701
実行結果の例
実行結果を確認してみます。
実行した結果はJPMAP-API/downloads
以下に保存される以下の2種類です。
- ダウンロードしてきた生データ(CSV)
- ダウンロードしてきたデータをグラフ化したもの(PNG)
今回はデータ名をdata
と指定しているので、それぞれdata.csv
とdata.png
という名前で出力されます。
今回、点検索で指定したのは、たまたま神奈川県海老名市のあたりだったのですが、グラフをみると2019年10月頃の雨量が多そうです。
何があったのかというと、台風19号が上陸した時期でした。
2019年10月12日、過去最強クラスの台風19号(Hagibis)が大型で強い勢力を保ったまま伊豆半島に上陸しました。台風の接近・通過に伴い、西〜東日本の広い範囲で大雨・強風となりました。中でも静岡県や関東甲信越、東北地方ではこれまでに経験したことのないような記録的な大雨が降り、大規模な河川氾濫や土砂災害に見舞われました。この大雨で、気象庁は1都12県に大雨特別警報を発表しました(12日15時30分に静岡県、神奈川県、東京都、埼玉県、群馬県、山梨県、長野県の7都県、19時50分に茨城県、栃木県、新潟県、福島県、宮城県の5県、13日0時40分に岩手県)。茨城県、栃木県、宮城県では2015年9月に鬼怒川が氾濫した「平成27年9月関東・東北豪雨」以来2回目、残りの都県では初の大雨特別警報となりました。
https://jp.weathernews.com/news/29409/
確かに衛星のデータにも表れていますね。
今回は点検索だけやってみましたが、矩形検索や行政界検索も動作確認していますので、もし有用でしたらお使いください。
感想
必要なことがちゃんと書いてあったので、コード書くのも簡単でした。
色んなプロダクトがこうやってAPIで簡単にとってこれるのは便利ですね。何よりローカルのリソースを圧迫しないのは助かります。
グラフの表現方法とか、思いつく範囲で改善点はあるので、本格的に使う機会があればアップデートしていきたいと思います。