気象庁GRIB2データをGDALで引っ叩くための下ごしらえ・可視化例

## TL;DR

- 気象庁のGRIB2データはGDALで読む事は出来ない
- wgrib2なら気象庁GRIB2データをNetCDFデータに変換出来る
- GDALはNetCDFデータなら読める

## 気象庁GRIB2データ

気象データといえばGRIB2形式らしい。
気象庁からいろんなデータがGRIB2で配布されている。

> <b>一般財団法人気象業務支援センター</b>にお金払わないと使えないのが実態

https://www.data.jma.go.jp/add/suishin/cgi-bin/catalogue/make_product_page.cgi?id=ZenModel

サンプルは以下からダウンロード出来る

https://www.data.jma.go.jp/developer/gpv_sample.html

## GDALで開いてみる

GISでラスターデータいじるならGDALでしょう、GRIB2にも対応しているし…

```sh
gdalinfo hogehoge_grib2.bin 

hogehoge_grib2.bin is a grib file, but no raster dataset was successfully identified.
gdalinfo failed - unable to open 'hogehoge_grib2.bin'.
```

えぇ…
GIS屋さんとしてはGDALで使えないとうれしくない！

## 気象庁GRIBのナゾ

https://qiita.com/vpcf/items/b680f504cfe8b6a64222#%E8%A7%A3%E6%9E%90%E9%9B%A8%E9%87%8F%E3%82%92python%E3%81%A7%E8%AA%AD%E3%81%BF%E3%81%9F%E3%81%84

上記によると<b>独自の圧縮形式</b>らしいので、GDALでは読めなかった訳ですね。

> 世間一般のフォーマットから逸脱しているのかと思いきや、後述のwgrib2では読めるのでなんだかよくわからない

### 2022-12-06追記

FOSS4G Japan 2022 Onlineの@honjoさんによる発表でその理由が解説されておりました。気象庁が配布しているGRIB2は「ランレングス圧縮」されていますが、GDALがこの圧縮方式のデコードに対応していない、というのが真相でした。↓続きはウェブで↓

https://www.osgeo.jp/events/foss4g-2022/foss4g-2022-japan-online/foss4g-japan-2022-online-core-day#sponsor3

## wgrib2でNetCDFに変換

GRIB2データをいじる時の気象クラスタ御用達（らしい）ソフトウェアである[wgrib2](https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/)は、そんな独自圧縮（らしい）気象庁GRIB2を開くことができ、NetCDFに変換する事ができます。NetCDFはGDALで読み込むことが出来るのでうれしい！

wgrib2の環境構築は[こちら](https://qiita.com/yono2844/items/fdd1dfe9b0a3be130e99)を参考にしつつ

上記のサンプルサイトからテキトーなGRIB2データを取得し（下記では毎時大気解析）、wgrib2で開いてみます

```sh
# データ名の一覧を取得出来ます
wgrib2 ./Z__C_RJTD_20170217000000_QMA_GPV_Rjp_ANAL_grib2.bin

1.1:0:d=2017021700:UGRD:10 m above ground:anl:
1.2:0:d=2017021700:VGRD:10 m above ground:anl:
1.3:0:d=2017021700:TMP:1.5 m above ground:anl:
1.4:0:d=2017021700:UGRD:1000 mb:anl:
1.5:0:d=2017021700:VGRD:1000 mb:anl:
1.6:0:d=2017021700:TMP:1000 mb:anl:
1.7:0:d=2017021700:UGRD:975 mb:anl:
1.8:0:d=2017021700:VGRD:975 mb:anl:
// 以下略
```

[仕様書](https://www.data.jma.go.jp/add/suishin/catalogue/format/FcdNwpGrbQmaRjpAnl_format.pdf)から、地表面の風速は`UGRD:10 m above ground`と`VGRD:10 m above ground`だとわかるので

```sh
wgrib2 ./Z__C_RJTD_20170217000000_QMA_GPV_Rjp_ANAL_grib2.bin -match '10 m above ground' -netcdf wind.nc
```

とすると`wind.nc`というファイル名でNetCDFデータが得られるので、QGISで開いてみる

> QGISは内部的にGDALを使っているので、QGISで読めればGDALで読めるということです

![スクリーンショット 2022-02-19 22.43.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/63d96b7f-e0dd-6258-fe88-77a2be0742a2.png)

```sh
gdalinfo wind.nc

Driver: netCDF/Network Common Data Format
Files: wind.nc
       wind.nc.aux.xml
Size is 512, 512
Metadata:
  NC_GLOBAL#Conventions=COARDS
  NC_GLOBAL#GRIB2_grid_template=0
  NC_GLOBAL#History=created by wgrib2
Subdatasets:
  SUBDATASET_1_NAME=NETCDF:"wind.nc":UGRD_10maboveground
  SUBDATASET_1_DESC=[1x505x481] UGRD_10maboveground (32-bit floating-point)
  SUBDATASET_2_NAME=NETCDF:"wind.nc":VGRD_10maboveground
  SUBDATASET_2_DESC=[1x505x481] VGRD_10maboveground (32-bit floating-point)
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,  512.0)
Upper Right (  512.0,    0.0)
Lower Right (  512.0,  512.0)
Center      (  256.0,  256.0)
```

（CRSはセットされていないものの）内部的な位置情報も正しいまま、GRIB2をGDALで読む事ができましたうれしい！
あとは煮るなり焼くなりお好きにどうぞ

## 可視化例

煮るなり焼くなりしてみました（PCでしか見られません）

https://github.com/Kanahiro/japan-windmap-example

https://kanahiro.github.io/japan-windmap-example/

![スクリーンショット 2022-02-20 23.44.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/7ba04e1e-881c-fc42-1dbe-c8400ec2e92c.png)

（オープンデータになったら面白い使い方色々ありそうだなぁ。。。）