GRIB2のファイルをNetCDFに変換し、QGISを使って任意時間のデータをGeoTIFFとしてエクスポートするメモ
最近、気象業務支援センターから提供されている気象データを触る必要があったのですが、扱いかたを何処かに記録しておかないと忘れそうなのでそのためのメモです。
概要
grib2のままだと扱いづらいので、wgrib2を使ってnetCDFに変換します。また、QGISに読み込ませ任意の時間のデータをGeoTiffとしてエクスポートします。
ちなみにコマンドラインでの作業はWindows WSL2(Ubuntu)上で行ってます。
用語
- GRIB2 – GRIB2は、気象データの格子点バイナリ形式で、圧縮されたデータで効率的に気象予報情報を格納・交換するための標準的なデータフォーマットです。
- NetCDF – NetCDFは、多次元配列データを扱うための自己記述型のバイナリファイル形式で、気象学や地球科学で広く利用されています。
- wgrib2 – wgrib2は、GRIB2(GRIdded Binary version 2)ファイルの操作、データ抽出、変換に使用されるコマンドラインツールです。
参考サイト
サンプルデータ
気象庁の「GPVサンプルデータの一覧」からダウンロードします。この記事では「全球数値予報モデルGPV (GSM全球域・日本域)」の日本域データを使います。
zipを解凍するとファイルが2つはいっていますが、この記事ではZ__C_RJTD_20221013000000_GSM_GPV_Rjp_Gll0p1deg_Lsurf_FD0000-0100_grib2.bin
を使用します。
1 2 |
Lsurf - 地上予報データ L-pall- 気圧面予報データ |
wgrib2をインストールする
下記記事を参考とさせていただきました。
GRIB2形式データを処理するプログラムwgrib2(入門編)
公式サイトのページ下のほうから「wgrib2.tgz」をダウンロードします。
1 2 |
> wget https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz > tar -zxvf wgrib2.tgz |
ビルドするためにはcmakeが必要なのでインストールします。
1 |
> sudo apt install cmake |
ビルドします。
1 2 3 4 |
> cd grib2 > export CC=gcc > export FC=gfortran > make |
ビルドが通ったらコマンドとして実行できるようにパスを通します。([RCファイル]というのは.bashrcとか.zshrcです)
1 2 3 4 |
> mv grib2 /usr/local > echo export WGRIB2="/usr/local/grib2" >> [RCファイル] > exho export PATH="${WGRIB2}/wgrib2:${PATH}" >> [RCファイル] > source [RCファイル] |
実行してみてヘルプが表示されればOKです
netCDFに変換する
wgrib2を使ってgrib2ファイルをnetCDF形式に変換します。
とりあえず、サンプルデータの中身をwgrib2で確認してみます。
1 |
$ wgrib2 Z__C_RJTD_20171205000000_GSM_GPV_Rgl_FD0006_grib2.bin |
実行するとこんな感じでデータの内容が表示されます。
ひとまず、ちゃんとデータが読み取れていることと、気象項目にどんなものがあるかが確認できればOKです。
ダウンロードしたgrib2ファイルの中にどんな気象項目があるのか単位がなにかを調べたいときは-Vオプションをつけて実行すると詳細を確認できます。
このままだと分かりづらいので気象項目と単位を確認するために整形して出力します。
- HGT : ジオポテンシャル高度 単位:gpm
- RH : 相対湿度 単位:%
- TMP: 温度 単位:K
- UGRD: 東西風 単位:m/s
- VGRD: 南北風 単位:m/s
- VVEL: 鉛直風 単位:Pa/s
これでどんなデータが含まれているのかがわかりました。
いよいよ、netCDFに変換します。
grib2ファイルごとnetCDFに変換することもできますが気象項目毎に変換した方がのちのち扱いやすいので、ここでは「気温(TMP)」と「東西風(UGRD) & 南北風(VGRD)」のデータをnetCDFに変換します。
netCDFへの変換には-netcdfオプションを、気象項目での絞り込みにはwgrib2 の-matchオプションを使用します。
・気温データをnetCDFに変換
1 |
wgrib2 Z__C_RJTD_20221013000000_GSM_GPV_Rjp_Gll0p1deg_Lsurf_FD0000-0100_grib2.bin -match "TMP" -netcdf temperature.nc |
・風速データをnetCDFに変換
1 |
> wgrib2 Z__C_RJTD_20221013000000_GSM_GPV_Rjp_Gll0p1deg_Lsurf_FD0000-0100_grib2.bin -match "(UGRD|VGRD)" -netcdf wind.nc |
以上でnetCDFへの変換は完了です。
netCDFデータはQGISにメッシュデータとして読み込んだり、cdoというコマンドツールを使って操作することができます。
以下は、codコマンドをつかって作成したnetCDFデータの内容を確認しています。
netCDFファイルをQGIS読み込んでアニメーションさせる
作成したnetCDFファイルをQGISに読み込みます。
QGISのメーニューから「ベクター」→「メッシュレイヤーを追加」でnetCDFファイルを追加します。
「?」マークをクリックして座標参照系にEGS84(EPSG:4326)を指定します。
「?」マークが消えればOKです。
時系列でアニメーションさせてみます。
「ビュー」→「パネル」→「時系列コントローラー」を選択して操作パネルを表示します。
再生ボタンを押せばアニメーションされます。
任意時間のデータをGeoTIFFに変換する
「ビュー」→「パネル」から「プロセッシングツールを表示する」を選択します。
表示されたプロセシングツールから「メッシュ」→「メッシュデータをラスタライズ」を選択します。
ダイアログにて以下の設定を行います。
- 入力メッシュ:エクスポート対象とするメッシュレイヤー
- データセットグループ:「現在アクティブなデータセットグループ」を選択
- データセットの時間:任意の時間を選択
- 領域:「レイヤーから計算」→対象とするレイヤーを選択
- ピクセルサイズ:0.01程度、小さくするほど処理が重くなる
- 出力座標系:EPSG4326 – WGS 84
以上を設定して「実行」すると、ラスタレイヤーが追加されます。
あとは、通常通りレイヤーのエクスポートを行ってください。