ENVI_IDL:如何读取HDF4文件和HDF5文件的数据集和属性?

简介: 参考Documentation Center (l3harrisgeospatial.com)由于时间和精力,这里并没有对其中的函数进行详细的说明,只是介绍了函数作用以及用法。

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
目录
相关文章
|
机器学习/深度学习 网络架构 计算机视觉
UNet详细解读(一)论文技术要点归纳
UNet详细解读(一)论文技术要点归纳
759 0
|
Web App开发 Linux 测试技术
Linux下批量修改文件名(rename)
原文地址: http://blog.csdn.net/sea_shore/article/details/6102437 1.rename命令批量修改文件名, 其实linux下可以使用别的办法来批量修改文件名, 不过rename实在太方便了 比如把所有的表为cdb1_* 修改为cdb_*的在本目录下只需要# rename 'cdb1' 'cdb' * 以前都是写个for循环来做.
6863 0
|
存储 数据可视化 数据管理
在ArcGIS Pro中使用栅格函数
在ArcGIS Pro中使用栅格函数
824 1
|
缓存 API 开发者
京东按图搜索商品(拍立淘)API接口系列(京东API)
京东按图搜索商品(拍立淘)API 接口(.jd.item_search_img)通过上传图片搜索京东平台上的相似商品,基于图像识别技术提供便捷的商品搜索方式。适用于电商平台展示、比价等场景。响应参数包括公共参数、商品信息及搜索结果相关参数,方便分页展示和了解整体搜索规模。Python 请求示例展示了如何使用该接口进行图片搜索。
761 15
|
定位技术
ENVI: 如何创建GLT文件并基于GLT对图像进行几何校正?
ENVI: 如何创建GLT文件并基于GLT对图像进行几何校正?
2059 0
|
机器学习/深度学习 数据可视化 大数据
K值进行交叉验证
8月更文挑战第16天
|
数据处理 Windows
成信大ENVI_IDL第二周课堂内容:打开HDF4文件并读取文件以及简单的数据处理和保存+详细解析
成信大ENVI_IDL第二周课堂内容:打开HDF4文件并读取文件以及简单的数据处理和保存+详细解析
934 1
conda和pip指定镜像源下载
conda和pip指定镜像源下载
1571 1
Vue3如何使用element-ui,vue3使用Element,Element使用
Vue3如何使用element-ui,vue3使用Element,Element使用