以一个文件名为例:
FY4A:卫星名;AGRI:仪器名称;N_REGC:中国区域;1047E:星下点经度;L1:数据级别;GEO:定位数据;
20180620163000:观测起始时间:2018年6月20日16时30分00秒(UTC时);
20180620163416:观测结束时间:2018年6月20日16时34分16秒(UTC时);
4000M:空间分辨率;HDF:文件格式。
这个数据的时间间隔有些不太确定,一天大概有100多个数据文件,今天这个实验选择:北京时间2018年6月21日(即2018年的夏至)。分析每个半点的数据,即文件名中观测起始时间的后四位是3000。
这样如果一天的数据数目完整,可以下载24个半点的数据。需要注意的是,因为我们下载的是北京时间2018年6月21日的24个数据,而在下载网页选择中选择的是世界时UTC,与北京时间相差八个小时,所以实际上我们下载的数据是从UTM时间2018年6月20日16时30分-2018年6月21日15时30分。
下载好的数据如下:
这个网站可以找到“FY-4A成像仪L1_GEO数据格式说明”:
http://satellite.nsmc.org.cn/PortalSite/StaticContent/DocumentDownload.aspx?TypeID=15
下载下来打开,可以找到该文件中太阳天顶角的信息。下图的表格反映了该文件中太阳天顶角的一些信息,valid_range代表太阳天顶角的值(0-180度),FillValue代表填充值:65535。
用ENVI也可以查看文件的属性,找到文件中的太阳天顶角(SunZenith)的信息,打开:
打开以后可以看到这个图,查看图中每个部分的值,灰色区域中就是有效的太阳天顶角的值,值的范围是0-180,白色区域中就是文件的填充值,值为65535.
便于理解,简单用蓝线将这个半圆盘补全。这个文件实际上是显示了一个半圆盘的一部分,该部分只包括了中国和周边的一些地区。
太阳天顶角是太阳入射方向和天顶方向之间的夹角。当地面上一点的天顶角大于等于0小于90°时,与该点的太阳高度角互补,该点有太阳照射;当天顶角大于等于90度以后,该点就没有太阳照射了。所以根据一个像元的太阳天顶角信息,可以判断此时该点有无太阳照射。利用这个信息可以辅助于多方面的研究。
现在我们有一天每半小时的太阳高度角文件,可以把进行二值化,简单的反映出太阳在夏至这一天东升西落的情况。下面这个IDL程序将该数据中的太阳天顶角二值化,当太阳天顶角小于等于90°(即太阳高度角大于0°时),认为有太阳照射,设值为1;反之设为0。可以批量实现该数据原始HDF文件的打开、读取数据、二值化、生成ENVI标准格式和tiff图像的处理。
;#将FY4A-AGRI—L1数据太阳天顶角二值化,当太阳天顶角小于等于90°(即太阳高度角大于0°时),认为有太阳照射,设值为1;反之设为0#
pro sunzenith_angle_binaryzation
;严格编译规则
compile_opt idl2
;初始化
envi, /restore_base_save_files
envi_batch_init
;设定目录窗口,打开需要处理的HDF格式数据
HDF_File = dialog_pickfile(/multiple_files, title = '打开需要转换的数据')
;定义ENVI标准格式文件的数量N
N = n_elements(HDF_File)
;构建for循环,依次处理HDF文件
for i = 0,N - 1 do begin
;用h5f_open打开文件
File_ID = h5f_open(HDF_File[i])
;用h5g_open打开dataset,双引号''中是要打开数据集的名称
Dataset_ID=h5d_open(File_ID, 'NOMSunZenith')
;用h5d_read读取数据集数据,存入Data中
Data = h5d_read(Dataset_ID)
;当太阳天顶角大于90°(即太阳高度角小于0°时),认为没有太阳照射,所有的像元值为0
Data[where(Data gt 90)] = 0
;剩下的像元值为1,即有太阳照射
Data[where(Data ne 0)] = 1
;用file_basename提取文件名
HDF_File_Basename = file_basename(HDF_File[i], '.HDF')
;用strmid提取文件名中的日期Date,从第45个字符开始往后14个,YYYYMMDDHHMMSS
Date = strmid(HDF_File_Basename,44,14)
;设定输出路径
Out_Path = 'F:\test\'
;设定输出名
Out_File = Out_path + Date + '_SZ.dat'
openw, lun, Out_File, /get_lun
writeu, lun, byte(Data)
free_lun, lun
;写出文件的头文件信息
envi_setup_head,$
;数据类型是1:Byte (8 bits)
DATA_TYPE = 1 , $
FNAME = Out_path + Date + '_SZ.hdr',$
;储存方式是0:BSQ
INTERLEAVE = 0, $
NB = 1, $
NL = 1108, $
NS = 2748, $
OFFSET = 0, /write
;写成tiff格式
write_tiff, Out_path + Date +'.tiff', Data, /float
endfor
;关闭
envi_batch_exit
end
处理好后每个半点的图像如下所示,白色区域就是有太阳照射的地方,可以看到一天当中随着太阳天顶角的变化,太阳照射区域(白色区域)的变化由东向西增多,从北京时间21日10:30到16:30,整个区域都有太阳照射。之后从东边开始,黑色区域增多,即太阳照射区域减少。