01 读取函数代码
1.1 读取HDF4文件数据集
; 该函数用于HDF4文件数据集的读取 function read_hdf4_ds, hdf_path, ds_name ; 参数hdf_path表示HDF4文件的完整路径, ds_name表示HDF4文件下某一数据集的名称 ; 获取HDF4文件的句柄 hdf_id = HDF_SD_START(hdf_path, /READ) ; 获取数据集的index ds_index = HDF_SD_NAMETOINDEX(hdf_id, ds_name) ; 获取数据集的句柄 ds_id = HDF_SD_SELECT(hdf_id, ds_index) ; 获取数据集的数据 HDF_SD_GETDATA, ds_id, ds_data ; 关闭打开的数据集和文件,回收资源 ; 关闭已打开的数据集 HDF_SD_ENDACCESS, ds_id ; 关闭已打开的HDF4文件 HDF_SD_end, hdf_id ; 返回获取的数据集数据 return, ds_data end
1.2 读取HDF4文件数据集属性
; 该函数用于HDF4文件数据集属性的读取 function read_hdf4_ds_attr, hdf_path, ds_name, attr_name ; 参数hdf_path表示HDF4文件的路径, ds_name表示数据集的名称, attr_name表示属性的名称 ; 获取HDF4文件的句柄 hdf_id = HDF_SD_START(hdf_path) ; 获取数据集的index ds_index = HDF_SD_NAMETOINDEX(hdf_id, ds_name) ; 获取数据集的句柄 ds_id = HDF_SD_SELECT(hdf_id, ds_index) ; 获取数据集属性的index attr_index = HDF_SD_ATTRFIND(ds_id, attr_name) ; 获取数据集的属性 HDF_SD_ATTRINFO, ds_id, attr_index, data = attr ; 注意,返回的属性信息是以数组形式返回 ; 关闭已经打开的数据集和HDF4文件 ; 关闭已打开的数据集 HDF_SD_ENDACCESS, ds_id ; 关闭已打开的HDF4文件 HDF_SD_END, hdf_id ; 返回数据集属性 return, attr end
1.3 读取HDF5文件数据集
; 该函数用于获取HDF5文件的数据集 function read_hdf5_ds, hdf_path, ds_path ; 参数hdf_path表示HDF5文件的完整路径, ds_path表示数据集的路径(注意是hdf文件内部的数据集路径而不仅是名称了) ; 获取HDF5文件的句柄 hdf_id = H5F_OPEN(hdf_path) ; 获取数据集的句柄 ds_id = H5D_OPEN(hdf_id, ds_path) ; 获取数据集的数据 ds_data = H5D_READ(ds_id) ; 关闭已经打开的数据集和HDF5文件 ; 关闭已打开的数据集 H5D_CLOSE, ds_id ; 关闭已打开的HDF5文件 H5F_CLOSE, hdf_id ; 返回获取的数据集 return, ds_data end
1.4 读取HDF5文件数据集属性
; 该函数用于获取HDF5文件数据集的属性 function read_hdf5_ds_attr, hdf_path, ds_path, attr_name ; 获取HDF5文件的句柄 hdf_id = H5F_OPEN(hdf_path) ; 获取HDF5文件数据集的句柄 ds_id = H5D_OPEN(hdf_id, ds_path) ; 获取数据集属性的句柄 attr_id = H5A_OPEN_NAME(ds_id, attr_name) ; 获取HDF5文件的数据集属性 attr = H5A_READ(attr_id) ; 关闭已经打开的数据集及属性、HDF5文件 ; 关闭已经打开的数据集属性 H5A_CLOSE, attr_id ; 关闭已经打开的数据集 H5D_CLOSE, ds_id ; 关闭已经打开的HDF5文件 H5F_CLOSE, hdf_id ; 返回获取数据集属性 return, attr end
上述四个函数的简单使用:
; 本程序用于解决HDF4/5文件数据集及其属性的读取 pro HDF_DS_ATT ; HDF4文件的路径 hdf4_path = 'D:/IDL_program/experiment_data/chapter_1/MODIS_2018_mod04_3k/MYD04_3K.A2018121.0545.061.2018121172155.hdf' ; HDF4文件的数据集名称(通过HDF Explorer软件查看) ds_name = 'Optical_Depth_Land_And_Ocean' ; 数据集下的填充值属性名称 fv_name = '_FillValue' ; 读取HDF4文件的数据集 ds_data = read_hdf4_ds(hdf4_path, ds_name) print, size(ds_data) ; 意思一下打印一下数据集的size ; 读取HDF4文件数据集的属性_FillValue fv = read_hdf4_ds_attr(hdf4_path, ds_name, fv_name) print, fv[0] ; 注意,返回的属性信息是以数组形式返回(即便只有一个值) ; HDF5文件的路径 hdf5_path = 'D:/IDL_program/experiment_data/chapter_2/NO2/2017/OMI-Aura_L3-OMNO2d_2017m0101_v003-2018m0627t042221.he5' ; HDF5文件的数据集名称(通过HDF Explorer软件查看) ds_path = 'HDFEOS/GRIDS/ColumnAmountNO2/Data Fields/ColumnAmountNO2' ; 数据集下的属性之一: 比例系数ScaleFactor sf_name = 'ScaleFactor' ; 获取HDF5文件的数据集 ds_data = read_hdf5_ds(hdf5_path, ds_path) print, size(ds_data) ; 获取HDF5文件数据集的属性 sf = read_hdf5_ds_attr(hdf5_path, ds_path, sf_name) print, sf end