[C# GDAL 気象]数値予報モデルGPVを読み取る(その2)

前回の記事でGRIB2形式で提供される数値予報モデル(GPV)を、GDALを使って開いてみました。GRIB2ファイルには複数の時刻・高度(気圧面)の気象要素(風向風速や気温など)が記録されています。GDALではそれぞれを「バンド」として扱い、それぞれのバンドの時刻・高度・要素はバンドのDescriptionやMetaDataを見ることによって特定可能というところまでを前回の記事に記載しました。
しかし、MetaDataは文字列の配列になっているなどそのままでは扱いづらいため、バンドの情報をとりまとめるクラスを作ってみました。単にDescriptionとMetaDataを読み取って、バンドを特定するのに特に重要と思われる時刻(初期値・予報)、予報時間、高度(地上・気圧面)をプロパティに整数型や日付時刻型で保存するとともに、その他の情報もMetaDataからキーと値の形でDicitionaryに保存してみました。

このクラスを使って、下記のコードで気象庁のGRIB2形式のGPVを読み取ってみたのが下記のサンプルコードです。
14行目のGDAL有効化の部分は前回の記事のサンプルコードをご参照ください。
25行目でバンドのメタデータ(初期値時刻・高度・要素)を取得するクラス(上記参照)のインスタンスを発生させて、続く26・27行目で気圧面・初期値時刻・予報時間・要素を表示させています。

実際の読み取り例は下記のようになりました。

また、サンプル9行目(コメント行)を有効にして、高層(気圧面)のデータを読み取った場合の読み取り結果は下記のようになりました。

これで、欲しい時刻・要素・高度のGPVのみを抽出して、Geotiffで出力するなり、欲しい地点の情報をテキストで出力するなど出来そうです。
なお、GDALの公式サイト(2018.4.22閲覧)を見ると「GMT Compatible netCDF」の生成は出来るように書かれていますが、私の環境ではC#のAPIを使ってGMTのnetCDFファイルを作成することは出来ませんでした(ただし、いったんGeoTIFFで吐き出した後でgdal_translateしたらファイルの作成&GMTでの作図が出来た)1)例外:System.ApplicationException「GDALDriver::Create() … no create method implemented for this format.」が発生しました。


補足
高層のGPV(気圧面)のDescriptionが下記のようになっています。気圧の桁数が妙に多くて、とりあえず先頭部分だけを読み取ることで回避しています。

一方で、オフィシャルサイトでの例は下記のようになっています。

なにか、この辺りで情報をお持ちの方がいらっしゃいましたら、教えて頂けると幸いです。

脚注   [ + ]

1. 例外:System.ApplicationException「GDALDriver::Create() … no create method implemented for this format.」が発生しました。
コメントの入力は終了しました。