HDFについて

西田顕郎

HDFは衛星データをはじめとする各種データの共通フォーマットである。データそのものとともに、データに関する情報やフォーマット自身に関する情報などまでひとつのファイルに入れ込んでいるので、余分な解説ファイル(READMEとかヘッダーファイルと呼ばれるもの)を必要としないのはいいのだけど、ツールがなくては読みだすだけでも苦労したり、いろいろ方言があるので特定のツールで読めたり読めなかったり、なにかと苦労のタネでもある。

とりあえず、HDFの読み書きを完備しているリモセンソフトやGISソフト、MATLAB、IDLなどを使えば楽なのだろうけど、あくまでフリーな環境でとにかくどうにかしたい、という姿勢で、経験したことをまとめておく。

(注: 以下、プロンプトを$で表すので、以下の説明で、$は打ち込まなくてよい。)

参考:

HDF User's Guide


HDFファイルの構造

SDSとは

VDATAとは

SDSの読みだし

とりあえず衛星データなどで、とにかく画像を読みこみたいときに、SDSをraw binaryにさえできればなんとかなるということがよくある。それをするには、たとえばMODISのL1Bとかだと、

$ hdp dumpsds -i 0 -d -b 200310090120.250m.hdf > 2003_1009_MODL1B_250m.raw
オプションの解説:
-i 0 ... SDSのID。ここではゼロ番目のやつを読みだそうとしている。
-d ..... ヘッダやタグを出さない。
-b ..... バイナリで。
参考

みたいにすればOK。マルチバンドではBILで出力されるようだ。

データのサイズ(たてよこ)などを見るには、

$ hdp dumpsds -i 0 200310090120.250m.hdf | less
というふうにして、該当個所を探して行けば良い。

例: MODIS L1Bの読み込み

	i=MOD021KM.A2000313.0140.004.2002339140624.hdf
	hdp dumpsds -i 0 -d $i > latitude.txt        .... 緯度のファイル。406*271. -bオプションで、4バイトfloat
	hdp dumpsds -i 1 -d $i > longitude.txt       .... 経度のファイル。406*271. -bオプションで、4バイトfloat
	hdp dumpsds -i 3 -d -b $i > EV_1KM_RefSB.bsq .... 2バイト整数、15バンド、2030*1354. 
			"Earth View 1KM Reflective Solar Bands Scaled Integers"
			バンド "8,9,10,11,12,13lo,13hi,14lo,14hi,15,16,17,18,19,26"
		....
	hdp dumpsds -i 30 -d -b $i > Band_1KM_Emissive
	このあたりは、ncdump $iで最初に出てくる情報で読み取り可能。