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
目录
相关文章
GEE:如何批量处理并下载指定时间范围的月尺度NDVI数据集(MOD09GA为例)
GEE:如何批量处理并下载指定时间范围的月尺度NDVI数据集(MOD09GA为例)
1069 0
|
Python
python简单分割文件的方法(python经典案例)
这篇文章介绍了两种使用Python进行文件分割的方法:通过读取指定字节数分割大文件成小文件,以及通过行数将文本文件分割成多个小文件。
425 1
|
定位技术
ENVI: 如何创建GLT文件并基于GLT对图像进行几何校正?
ENVI: 如何创建GLT文件并基于GLT对图像进行几何校正?
1363 0
|
定位技术
ArcGIS:如何对栅格图像进行地理配准和定义投影?
ArcGIS:如何对栅格图像进行地理配准和定义投影?
4492 1
|
数据处理 Windows
成信大ENVI_IDL第二周课堂内容:打开HDF4文件并读取文件以及简单的数据处理和保存+详细解析
成信大ENVI_IDL第二周课堂内容:打开HDF4文件并读取文件以及简单的数据处理和保存+详细解析
709 1
|
机器学习/深度学习 搜索推荐 数据挖掘
【深度解析】超越RMSE和MSE:揭秘更多机器学习模型性能指标,助你成为数据分析高手!
【8月更文挑战第17天】本文探讨机器学习模型评估中的关键性能指标。从均方误差(MSE)和均方根误差(RMSE)入手,这两种指标对较大预测偏差敏感,适用于回归任务。通过示例代码展示如何计算这些指标及其它如平均绝对误差(MAE)和决定系数(R²)。此外,文章还介绍了分类任务中的准确率、精确率、召回率和F1分数,并通过实例说明这些指标的计算方法。最后,强调根据应用场景选择合适的性能指标的重要性。
1366 0
|
人工智能 搜索推荐 前端开发
seo如何优化
木头左,物联网工程师,分享AI工具。本文探讨SEO优化,包括理解基本概念,关键词研究,内容、外部链接和技术优化。关键词研究注重长尾词和竞争度;内容优化要求高质量、结构清晰、定期更新;外部链接要来自高权重源,自然且多样;技术优化涉及URL结构、网站速度、移动友好性和安全性等。记得点赞、收藏和关注哦!
seo如何优化
ENVI:如何自定义beijing54、西安80、国家2000坐标系
ENVI:如何自定义beijing54、西安80、国家2000坐标系
1184 0
|
索引
ENVI_IDL: 如何读取HDF5文件再优美地做个均值处理?(以OMI数据为例)
ENVI_IDL: 如何读取HDF5文件再优美地做个均值处理?(以OMI数据为例)
484 0