GOSAT(いぶき)のTANSO-FTSセンサで取得された、Level 3のHDF5ファイルからGeoTIFF出力するpythonプログラムを作成しました。
なんか腑に落ちないところがある....
NIES (国立環境研究所)がデータ提供されています。
データの取得
L2の記事を参考にしてください。
TANSO-FTS L3データの概要
"TANSO-FTS SWIR レベル 3 プロダクト(以下、「FTS SWIR L3 プロダクト」と記す)は、1か月分(例えば1月は1月1日~1月31日)の FTS SWIR レベル 2 プロダクト(以下、「FTS SWIR L2 プロダクト」と記す)に基づいて空間統計学的な処理を施し、緯度・経度方向各 2.5 度の格子領域での1か月間の平均的な温室効果ガス濃度を推定した結果である。"
NIES GOSAT TANSO-FTS SWIR レベル 3プロダクトフォーマット説明書より引用
L3データのファイルの中身には、全球データで、各統計情報が格納されています。
プロダクトフォーマット説明書を読んでいくと、各ピクセルの定義については、「格子の領域内の」とあるので、格子全体の値と考えてよさそうです。
L3データの中身
L2データと比較して首を傾げたくなる箇所が幾つかありました。
hdf_file = h5py.File(input_file,'r') #metadataの場合 #L2データ hdf_file['Global']['metadata']['satelliteName'][()][0].decode("utf-8") ->GOSAT #L3データ hdf_file['Global']['metadata']['satelliteName'][()].decode("utf-8") ->GOSAT #dataのattributionの場合 #単位を取り出す # L2データ unit=str(hdf_file['Data']['mixingRatio']['XCO2'].attrs['unit'][()][0].decode("utf-8")) -> ppmv # L3データ unit=str(hdf_file['Data']['mixingRatio']['XCO2'].attrs['unit'].decode("utf-8")) -> ppmv
差分としては小さいですが、この差分は憤りました。pythonのh5モジュールが1次元データと2次元データでmetadataとかattributionの変数の扱い方が違うのかも知れないのかも知れません。まだ検証してません....
ほしいmetadataの項目用に追加しなければならないので、手間でした。
使い方
python gosat_h5.py --inputfile=GOSATH5FILE.h5 --dataset=dataframe --outfile=out.geotiff
L2と違うところはないです。
以下実行例です。
GitHubにアップしてあります。
関連
所感
上に挙げたようにメタデータを取り出すとき、L2と異なるのが違和感がありましたが、全球データなのでGeoTIFF出力は難しくなかったです。
その面では楽でした。
L2を作成したとき、L3で使いまわす想定をしていなかったので、コードが冗長になっているところがあるのが悔やまれます。
参考文献
NIES GOSAT TANSO-FTS SWIR レベル 2 プロダクトフォーマット説明書
NIES GOSAT TANSO-FTS TIR レベル 2 プロダクトフォーマット説明書
NIES GOSAT TANSO-FTS SWIR レベル 3 プロダクトフォーマット説明書
GitHub - TTY6335/GOSAT_h5: program which extract data from GOSAT h5 files