Windowsにwgrib2とgrib2jsonを入れる。

#注意
この記事は、2年ほど前にQiitaに投稿した記事の再投稿になります。
若干内容が古くなっている可能性があります。

---

<p>
  インストールをして、簡単な動作確認をしてみます。<br>
  踏み込んだ内容はありませんので、あくまで初心者の方用の記事です。
</p>

<h2>wgrib2 インストール</h2>

<p>
  インストールは <a href="http://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/Windows_64/">こちら</a>。
</p>

<p>
  いっぱいファイルがあって何を落とせばいいかわからない方は、最初にwgrib2.exeだけを落としてください。<br>
  wgrib2.exeだけで実行すれば、実行に必要な(不足している)ファイルがダイアログで出力されるので、それらを同じディレクトリに入れて、パスを通せばOKです。
</p>

<h2>wgrib2 動かしてみる</h2>
<p>
  今回は、<a href="http://nomads.ncep.noaa.gov/">NOMADS</a>から風速データを落としてきます。<br>
  <span class="code">GDAS 0.25(grib filter) => gdas.2018xx</span> と進みます。
</p>

<p>
  今回は取り合えず**地上10m地点のU方向, V方向の風**を取得します。<br>
  ですので、チェックボックスは以下をチェック。<br>
  - 10m above ground<br>
  - UGRD<br>
  - VGRD
</p>

<p>
  そして、落としたファイルをwgrib2で見てみます。<br>
  Shellで下記を実行。
</p>

<pre class="code">
$ wgrib2 [ファイル名]
1:0:d=2018041200:UGRD:10 m above ground:anl:
2:778510:d=2018041200:VGRD:10 m above ground:anl:
</pre>

<p>
  出力の内容はつまり、<br>
  1：地上10mでU方向のデータ<br>
  2：地上10mでV方向のデータ<br>
  ということです。うまく取れてるようです。
</p>

<p>
  ちなみに、Optionで*-V*を指定すると、
</p>

<pre class="code">
$ wgrib2 -V [ファイル名]
1:0:vt=2018041200:10 m above ground:anl:UGRD U-Component of Wind [m/s]:
ndata=1038240:undef=0:mean=-0.0738295:min=-19.6813:max=28.6987
grid_template=0:winds(N/S):
  lat-lon grid:(1440 x 721) units 1e-06 input WE:NS output WE:SN res 48
  lat 90.000000 to -90.000000 by 0.250000
  lon 0.000000 to 359.750000 by 0.250000 #points=1038240

2:778510:vt=2018041200:10 m above ground:anl:VGRD V-Component of Wind [m/s]:
ndata=1038240:undef=0:mean=0.173403:min=-26.8313:max=23.2687
grid_template=0:winds(N/S):
  lat-lon grid:(1440 x 721) units 1e-06 input WE:NS output WE:SN res 48
  lat 90.000000 to -90.000000 by 0.250000
  lon 0.000000 to 359.750000 by 0.250000 #points=1038240
</pre>

<p>
  と、データの詳細な情報が見れます。
</p>

<p>
  更に、-dオプションをつけて、抜き出すデータの番号を指定すると、
</p>

<pre class="code">
$ wgrib2 -d 1 [ファイル名]
1:0:d=2018041200:UGRD:10 m above ground:anl:
</pre>

<p>
  このように、指定された番号に対応するデータのみ取り出せます。<br>
  なので、例えばU方向のデータだけ取り出して別のファイルに保存したければ、
</p>

<pre class="code">
$ wgrib2 -d 1 [ファイル名] -order we:ns -ieee u.dat(好きな名前でいいです)
</pre>

<p>
  とすればOKです。
</p>

<h2>grib2json インストール</h2>

<a href="https://github.com/weacast/weacast-grib2json">
  grib2json インストール
</a>
<p>
  このリポジトリをローカルにもってきます。
</p>

<pre class="code">
$ git clone https://github.com/weacast/weacast-grib2json.git
</pre>

<p>
  として、srcにあるファイルだけどこか別のディレクトリに保存すればOKです。
</p>

<p>
  ちなみに、そのままだと<br>
  <span class="code">Error: Unable to access jarfile</span> だとか、何かしらエラーが出てしまいます。<br>
  ですので、私は grib2json.cmd を
</p>

<pre class="code">
  @echo off
  "java" -Xmx512M -jar "%~dp0grib2json.jar" %*
</pre>

<p>
  と書き換えたらうまいこと動きました。
</p>

<h2>
  grib2json 動かしてみる
</h2>

<p>
  先ほど落とした風のファイルを、json形式で出力してみます。
</p>

<pre class="code">
$ grib2json [ファイル名]
[
  {
  "header":{
    "discipline":0,
    "gribEdition":2,
    "gribLength":778510,
    "center":7,
    "subcenter":0,
    "refTime":"2018-04-12T00:00:00.000Z",
    "significanceOfRT":1,
    "productStatus":0,
    "productType":1,
    "productDefinitionTemplate":0,
    "parameterCategory":2,
    "parameterNumber":2,
    "parameterUnit":"m.s-1",
    "genProcessType":2,
    "forecastTime":0,
    "surface1Type":103,
    "surface1Value":10.0,
    "surface2Type":255,
    "surface2Value":0.0,
    "gridDefinitionTemplate":0,
    "numberPoints":1038240,
    "shape":6,
    "gridUnits":"degrees",
    "resolution":48,
    "winds":"true",
    "scanMode":0,
    "nx":1440,
    "ny":721,
    "basicAngle":0,
    "lo1":0.0,
    "la1":90.0,
    "lo2":359.75003,
    "la2":-90.0,
    "dx":0.25,
    "dy":0.25
  }
},
{
  "header":{
    "discipline":0,
    "gribEdition":2,
    "gribLength":748505,
    "center":7,
    "subcenter":0,
    "refTime":"2018-04-12T00:00:00.000Z",
    "significanceOfRT":1,
    "productStatus":0,
    "productType":1,
    "productDefinitionTemplate":0,
    "parameterCategory":2,
    "parameterNumber":3,
    "parameterUnit":"m.s-1",
    "genProcessType":2,
    "forecastTime":0,
    "surface1Type":103,
    "surface1Value":10.0,
    "surface2Type":255,
    "surface2Value":0.0,
    "gridDefinitionTemplate":0,
    "numberPoints":1038240,
    "shape":6,
    "gridUnits":"degrees",
    "resolution":48,
    "winds":"true",
    "scanMode":0,
    "nx":1440,
    "ny":721,
    "basicAngle":0,
    "lo1":0.0,
    "la1":90.0,
    "lo2":359.75003,
    "la2":-90.0,
    "dx":0.25,
    "dy":0.25
    }
  }
]
</pre>

<p>
  1, 2それぞれが別の連想配列になっています。<br>
  ではさらに、風速データのみをJSON形式で保存してみます。
</p>

<pre class="code">
$ grib2json --names --data -o file.json(好きなファイル名) [ファイル名]
</pre>

<p>
  すると、-oオプションの次に与えた任意のファイル名で、JSON形式のファイルが保存されます。
</p>

<p>
  こうすると、何かと扱い易くて便利です。<br>
  (ちなみに、leaflet.jsのvelocityプラグインがなかなか楽しいので、是非grib2jsonを使って実行してみてください)
</p>

<h2>最後に</h2>

<p>
  つい最近使うことになった上記二つのツールですが、便利なのに案外初心者向けの記事がなくて困ってしまいました。<br>
  ですので、この記事が少しでも次のプログラマーを目指す方の一助になればいいな、と思っています。
</p>

<p>
  また、私自身ペーペーなので、訂正すべき個所があればコメントをお願いいたします。
</p>