LoginSignup
3
4

More than 5 years have passed since last update.

数値予報モデルGPVの作画方法メモ

Posted at

概要

気象データ高度利用ポータルサイト から取得可能な GPVサンプルデータ のうち、局地数値予報モデルGPV (LFM) の風の情報を、できるだけ手間をかけずに作図してみました。
処理が重い・図が見にくいなど問題はありますが、やり方をメモしておきます。

作業環境と使用ツール

OS: mac OS Sierra
Software Environment: Anaconda (3.x系)
Tools:

作業手順

  1. ecCodesのインストール
    以下のコマンドで ecCodes をインストールします。

    conda install -c conda-forge eccodes
    
  2. GPVの取得
    GPVサンプルデータ から
    局地数値予報モデルGPV(LFM) をダウンロードします。

  3. 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
    
  4. 風の情報の可視化
    上の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()
    

作画された画像
lfm_surf_wind.png

考察

GPVのパースはecCodesで問題なさそうですが、作図は重すぎるので他の方法を探す必要がありそうです。

今後の課題:

  • 地図上への重畳表示
  • 作画の速度を早く
  • 風の矢印を見やすく
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4