概要
気象データ高度利用ポータルサイト から取得可能な GPVサンプルデータ のうち、局地数値予報モデルGPV (LFM) の風の情報を、できるだけ手間をかけずに作図してみました。
処理が重い・図が見にくいなど問題はありますが、やり方をメモしておきます。
作業環境と使用ツール
OS: mac OS Sierra
Software Environment: Anaconda (3.x系)
Tools:
作業手順
-
ecCodesのインストール
以下のコマンドで ecCodes をインストールします。conda install -c conda-forge eccodes
GPVの取得
GPVサンプルデータ から
局地数値予報モデルGPV(LFM) をダウンロードします。-
GPVのパース
LSMの地表の風のレイヤー (10u, 10v) の情報をJSON形式で出力します。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()
考察
GPVのパースはecCodesで問題なさそうですが、作図は重すぎるので他の方法を探す必要がありそうです。
今後の課題:
- 地図上への重畳表示
- 作画の速度を早く
- 風の矢印を見やすく