この記事では、気象庁解析雨量GPVを例としてGrib2フォーマットのデータを解凍し、可視化する方法を解説します。
1. はじめに
気象の分野ではよく使われているGrib2というフォーマットがあります。 このフォーマットは圧縮がかかっているので、そのままでは可視化も数値データを読み取ることもできません。このままでは扱いにくいので、GISや数値計算で使えるようにASCII-GridやGeoTIFFに変換することを考えてみたいと思います。
ただ、Grib2はASCII-GridやGeoTIFFに直接変換することはできませんので、まずはGrib2を解凍して圧縮のかかっていないバイナリファイルに変換することとします。そして解凍したファイルにどのようなデータが入っているかを確認するために可視化(図化)することにします。
次の段階として、解凍したファイルをASCII-GridやGeoTIFFフォーマットのファイルに変換することにしますが、それは次回の記事に回したいと思います。
2. 使用環境
Grab2フォーマットのファイルを解凍するには、wgrib2というアプリを使います。そして解凍されたファイルを可視化するにはGrADSというアプリを使います。しかしながら、これらのアプリはLinux上で使うアプリで、Windowsでは通常使えません。
Linuxは一般的なOSではないですし、この記事の対象者はWindows PCを使っていることを想定しているので、 ここではWindows上で実行することとし、wgrib2とGrADSはそれぞれWindows上でも使えるものを用います。
項目 | 内容 |
使用データ | 気象庁解析雨量GPV |
使用OS | Windows |
使用アプリ | wgrib2(解凍)、opengrads(可視化) |
3. 解析雨量GPVの仕様
気象庁解析雨量GPVを取り扱うためにはそのデータ構造を知る必要があります。気象庁の資料によると、気象庁解析雨量GPVは下記のような仕様になっています。
上の図のように東西方向に2560グリッド、南北方向に3360グリットの格子にデータが格納されています。そして、データが分布する矩形領域の四隅の座標(緯度経度)が決まっています。これにより自動的に1グリットあたりの東西・南北のグリッドの角度の大きさが決まります。計算すると下記のようになります。東西と南北でグリッドの角度の大きさが違っていますが、距離に換算すると約1.0kmになります。
項目 | 内容 |
南西端(起点) | 東経118.0度、北緯 20.0度 |
グリッドの大きさ(東西方向) | 0.0125度 |
グリッドの大きさ(南北方向) | 0.0083333度 |
各グリッドには、東西方向のインデックス 「i」と南北方向のインデックス「j」がふられています。インデックスは南西隅(20.0N, 118.0E)を原点として、東西方向は西から東に向かって1 から2560、南北方向は南から北に向かって1から3360の番号がついています。インデックスは0でなくて1から始まることに注意してください。
4. 解凍方法
Grib2の解凍には、wgrib2というアプリを使います。wgrib2はコマンドから用いるアプリです。Grib2ファイルの全体をダイレクトアクセスバイナリ形式のファイルに解凍する場合は、次のコマンドを用います。
wgrib2 grib2FilePath -no_header -bin outputFilePath
ここに、grib2FilePath: 解凍するGrib2ファイルのファイルパス、-no_header:解凍されたファイルにヘッダ情報をつけないオプション、-bin:出力ファイルをバイナリファイルに指定するオプション、outputFilePath:出力ファイルパス
Grib2ファイルを部分的に抽出してダイレクトアクセスバイナリに解凍する場合は下記のコマンドを用います。
wgrib2 grib2FilePath -no_header -ijbox iMin:iMax:iStep jMin:jMax:jStep outputFilePath bin
ここに、grib2FilePath: 解凍するGrib2ファイルのファイルパス、-no_header:解凍されたファイルにヘッダ情報をつけないオプション、-ijbox:抽出する領域を4隅のグリッドのインデックスで指定するためのオプション、outputFilePath:出力ファイルパス、bin:出力ファイルをバイナリファイルに指定するオプション
さらに、-ijboxオプションによる領域の指定の仕方は下記のようになります。
-ijbox iMin:iMax:iStep jMin:jMax:jStep
iMin:西端の東西方向インデックス、 iMax:東端の東西方向インデックス、iStep:データを抽出する際の東西インデックス間隔(データを間引く場合は1より大きい整数を指定)、jMin:南端の南北方向インデックス、jMax:北端の南北方向インデックス、jStep:データを抽出する際の南北方向インデックス間隔(データを間引く場合は1より大きい整数を指定)
5. ダイレクトアクセスバイナリファイルのデータ構造
気象庁解析雨量GPVを解凍したダイレクトアクセスバイナリファイルは、4バイト長(単精度)の数値データが西東方向から南北方向に向けてデータが順に一直線に並んでいるデータ構造になります。
ダイレクトアクセスバイナリファイル自体には、東西・南北のグリッド数やグリッドサイズ等の情報は含まれていないので、これでは読み取った値の位置情報(緯度経度情報等)がわかりません。
そこで、ダイレクトアクセスバイナリファイルには通常そのデータの仕様を示すコントロール・ファイルというテキスト・ファイルが添付されます。
コントロール・ファイル「rain_whole.ctl」
dset ^Z__C_RJTD_20190630020000_SRF_GPV_Ggis1km_Prr60lv_Aper10min_ANAL_grib2_whole.grd options template undef 9.999E+20 xdef 2560 LINEAR 118.0 0.0125 ydef 3360 LINEAR 20.0 0.008333333333333333 zdef 1 LEVELS 1000 tdef 1 LINEAR 02:00Z30Jun2019 10mn vars 1 rr 0 0 rainfall endvars
1行目(dest)は、対象とするダイレクトアクセスバイナリファイルのファイルパスの指定で、ファイルパスの手前に「^」をつけます。
3行目(undef)は、当該グリッドの値が定義されていないことを示す数値です。この数値がグリットのなかに入っているときは、そのグリッドには値がないことを表します。
4行目と5行目(xdef、ydef)は、それぞれ東西方向と南北方向の定義で、例えば4行目(xdef)は、2560グリッドで等間隔に分割されていて、118度から始まり、1グリッドの大きさは0.0125度であることを表します。
6行目(zdef)は高さ方向のグリッド分割の定義で、7行目(tdef)は時間ステップ間隔の定義ですが、ここではどちらも1つしか値をとりませんので、分割数は1となっています。
8行目から10行目はファイルに格納されている数値の定義です。8行目の「vars」から10行目の「endvars」の間の行に数値の定義を記述します。8行目「vars」に格納している変数の種類数を記述します。ここでは格納されているのは雨量だけですから「1」になっています。そして、9行目で1個目のデータ(降雨)の定義を記述しています。
6. ダイレクトアクセスバイナリの可視化
Grib2ファイルをダイレクトアクセスバイナリにうまく解凍できたかどうかを確認するためにもデータを可視化する必要があります。ダイレクトアクセスバイナリを可視化するためにはGrADSというアプリを使いますが、そのときにこのコントロール・ファイルを用います。
GrADSは対話型のコンソールアプリなので、ダイレクトアクセスバイナリファイルとそのコントロールファイルがあるディレクトリ上で下記のようにコマンドを打ち込みます。GrADSは、通常Linuxで用いられるアプリで、今回はWindows版のGrADSであるOpenGrADSというアプリを使うことを前提にして解説します。
コマンド「opengrads」でOpenGrADSを起動、コマンド「n」で画面を縦型に、そしてコマンド「oepn rain_whole.ctl」でコントロールファイルを開きます。最後にコマンド「d rr」で降雨データを表示します。OpenGrADSアプリが正常に機能すると、下記のような図が表示されます。
7. 配布プログラムの使い方
実際にここで解説した方法を試すためのプログラムの使い方について解説します。プログラム自体は下記のダウンロードリンクからダウンロードすることができます。
wgrib2でgribファイルを解凍するプログラム
また、wgrib2アプリのWindows版は下記のリンクからダウンロードできます。
https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/Windows10/
OpenGrADSは下記のリンクからダウンロードできます。
https://sourceforge.net/projects/opengrads/files/grads2/
ダウンロードしたファイルはzip圧縮がかかっているので解凍してやります。そうすると、「grib2_decomp」というフォルダが現れ、その中には下記のようなファイルが見つかります。
「wgrib2_win」フォルダには、wgrib2のアプリが入っています。
「Z__C_RJTD_20190630020000_SRF_GPV_Ggis1km_Prr60lv_Aper10min_ANAL_grib2.bin」は解凍するGrib2ファイルです。
「expand_grib2_01.cmd」、 「expand_grib2_02.cmd」および 「expand_grib2_03.cmd」がwgrib2アプリを動かすためのプログラムで、中身はバッチコマンドが記述されています。テキスト・エディタで中身をみることができます。
「expand_grib2_01.cmd」は、Grib2全体をダイレクトアクセスバイナリファイルに解凍するプログラムです。ダブルクリックすると、ダイレクトアクセスバイナリファイル「Z__C_RJTD_20190630020000_SRF_GPV_Ggis1km_Prr60lv_Aper10min_ANAL_grib2_whole.grd」が現れます。
「expand_grib2_02.cmd」は、Grib2を部分的に抽出しダイレクトアクセスバイナリファイルに解凍するプログラムです。ダブルクリックすると、ダイレクトアクセスバイナリファイル「Z__C_RJTD_20190630020000_SRF_GPV_Ggis1km_Prr60lv_Aper10min_ANAL_grib2_cropped.grd」が現れます。
「expand_grib2_03.cmd」は、Grib2の九州部分をダイレクトアクセスバイナリファイルに解凍するプログラムです。ダブルクリックすると、ダイレクトアクセスバイナリファイル「Z__C_RJTD_20190630020000_SRF_GPV_Ggis1km_Prr60lv_Aper10min_ANAL_grib2_cropped_kyushu.grd」が現れます。
OpenGrADSからコントロール・ファイル「rain_whole.ctl」を「6. ダイレクトアクセスバイナリの可視化」で示した手順に従い開くとダイレクトアクセスバイナリファイル「Z__C_RJTD_20190630020000_SRF_GPV_Ggis1km_Prr60lv_Aper10min_ANAL_grib2_whole.grd」が可視化されて日本全体の降雨分布が表示されます。
OpenGrADSからコントロール・ファイル「rain_cropped.ctl」を「6. ダイレクトアクセスバイナリの可視化」で示した手順に従い開くとダイレクトアクセスバイナリファイル「Z__C_RJTD_20190630020000_SRF_GPV_Ggis1km_Prr60lv_Aper10min_ANAL_grib2_cropped.grd」が可視化されて中国・四国・九州地方の降雨分布が表示されます。
OpenGrADSからコントロール・ファイル「rain_cropped_kyushu.ctl」を「6. ダイレクトアクセスバイナリーの可視化」で示した手順に従い開くとダイレクトアクセスバイナリファイル「Z__C_RJTD_20190630020000_SRF_GPV_Ggis1km_Prr60lv_Aper10min_ANAL_grib2_cropped_kyushu.grd」が可視化されて下記に示したように九州地方の降雨分布が表示されます。
8. まとめ
この記事では、気象庁解析雨量GPVを例としてGrib2フォーマットのデータを解凍し、可視化する方法を解説しました。ポイントをまとめると下記のようになります。
- Grib2フォーマットの解凍にはwgrib2というアプリを用います。解凍してダイレクトアクセスバイナリというフォーマットにします。
- ダイレクトアクセスバイナリファイルは、ファイル自体にはデータ構造を示す情報が含まれていないので、データ構造を示すためのコントロール・ファイルというテキストファイルを作成する必要があります。
- ダイレクトアクセスバイナリファイルの可視化(図化)にはGrADS(Windows版はOpenGrADS)というアプリを用います。GrADSからコントロール・ファイルを開くと当該ダイレクトアクセスバイナリファイルのデータを可視化することができます。
以上、最後まで読んでいただきありがとうございました。