概要
気象データ高度利用ポータルサイト から取得可能な GPVサンプルデータ のうち、局地数値予報モデルGPV (LFM) の風の情報を、できるだけ手間をかけずに作図してみました。
処理が重い・図が見にくいなど問題はありますが、やり方をメモしておきます。
作業環境と使用ツール
OS: mac OS Sierra
Software Environment: Anaconda (3.x系)
Tools:
作業手順
-
ecCodesのインストール
以下のコマンドで ecCodes をインストールします。
conda install -c conda-forge eccodes
2. GPVの取得
[GPVサンプルデータ](http://www.data.jma.go.jp/developer/gpv_sample.html) から
局地数値予報モデルGPV(LFM) をダウンロードします。
3. GPVのパース
LSMの地表の風のレイヤー (10u, 10v) の情報をJSON形式で出力します。
```bash
grib_dump -j -w shortName=10u Z__C_RJTD_20170126120000_LFM_GPV_Rjp_Lsurf_FH0000_grib2.bin > z_10u.json
grib_dump -j -w shortName=10v Z__C_RJTD_20170126120000_LFM_GPV_Rjp_Lsurf_FH0000_grib2.bin > z_10v.json
-
風の情報の可視化
上の2で出力したJSONを、matplotlibで可視化します。
以下のコードでは、Jupyter Notebook
可視化のサンプルコード
import json
import numpy as np
import matplotlib.pyplot as plt
w10u = {a['key']:a['value'] for a in json.load(open('lsurf_10u.json'))}
wus = [v if v else 0 for v in w10u['values']]
w10v = {a['key']:a['value'] for a in json.load(open('lsurf_10v.json'))}
wvs = [v if v else 0 for v in w10v['values']]
wus[-1], wvs[-1] = 0, 0 # 変な値が入っているので埋める
x, y = w10u['Ni'], w10u['Nj']
X, Y = np.meshgrid(np.arange(x), np.arange(y))
U = np.array(wus).reshape((y, x))
V = np.array(wvs).reshape((y, x))
plt.quiver(X,Y,U,V,color='red',angles='xy',scale_units='xy', scale=5.0)
全部描くと遅いので描画範囲を狭くする
plt.xlim([180,230]) # 描くXの範囲
plt.ylim([150,200]) # 描くyの範囲
plt.show()
作画された画像
<img width="952" alt="lfm_surf_wind.png" src="https://qiita-image-store.s3.amazonaws.com/0/65190/0b1d05f5-07ef-d2d7-224d-662b40f2fd88.png">
### 考察
GPVのパースはecCodesで問題なさそうですが、作図は重すぎるので他の方法を探す必要がありそうです。
今後の課題:
- 地図上への重畳表示
- 作画の速度を早く
- 風の矢印を見やすく