たぶん動く...

多分GIS系の人。あくまで個人的見解であり、所属団体を代表するものではありません。

GOSAT TANSO-FTS L3データをGeoTIFF出力する

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にアップしてあります。

github.com

関連

tty6335.hatenablog.com

所感

上に挙げたようにメタデータを取り出すとき、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