利用IDL读取HDF5文件

首先是要了解HDF5文件的结构,利用pannoly文件能快速浏览文件的信息和命名,pannoly里面显示的数组行列和波段和IDL反过来的,IDL是 数组[列][行][波段] pannoly是数组(波段,行,列)

然后就是读取

file_id = H5F_OPEN('文件地址')
;打开Data这个群组
group_id=H5G_OPEN(file_id,'Data')
;H5D_OPEN打开这个叫b24数据集
dataset_id=H5D_OPEN(group_id,'b24')
;读取数据集中的数据
SdsData1=H5D_READ(dataset_id)
;读取属性可用
Intercept_id= H5A_OPEN_Name(dataset_id,'Intercept')
Slope_id=H5A_OPEN_Name(dataset_id,'Slope')
Intercept1=H5A_READ(Intercept_id)
Slope1=H5A_READ(Slope_id)

增加一个bug的心得,利用 thesefiles = FILE_SEARCH('*',count = numFiles)得到路径下的所有HDS5文件,我在读HDF程序中调用了另一个程序,并且cd了新的路径,之后重新进行下一个HDF读取时,file_id = H5F_OPEN(thesefiles[fidx])提示我无法读取该HDF5文件。

处理办法就是每次循环的开头CD回HDF5存在的路径。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
针对您的问题,我可以提供以下步骤: 1. 打开ENVI,选择File -> Open External File,选择HDF5数据文件。 2. 打开IDL环境,在命令行中输入以下脚本: ``` envi, /restore_base_save_files file = FILEPATH('input_file.h5', SUBDIRECTORY=['data'], $ ROOT_DIR=['/']) hdf5 = HDF(/read, FILENAME=file) data = hdf5->GetData() metadata = hdf5->GetMetadata() lat = metadata[0].Data.Latitude lon = metadata[0].Data.Longitude ``` 这个脚本将读取HDF5数据文件并提取数据和元数据。其中,lat和lon是数据的经纬度信息。 3. 创建GLT文件。在IDL中输入以下脚本: ``` gltpath = FILEPATH('output_glt.glt', SUBDIRECTORY=['data'], $ ROOT_DIR=['/']) glt = ENVIGeometricCorrectionRaster(gltpath, $ DATASET_NAME='input_file', $ SPATIAL_REF_OBJ=hdf5->GetSpatialRef(), $ SPATIAL_REF_CODE=hdf5->GetSpatialRefCode(), $ PIXEL_SIZE=hdf5->GetPixelSize(), $ UL_LATITUDE=max(lat), $ UL_LONGITUDE=min(lon), $ ROTATION_ANGLE=0.0, $ OUTPUT_PIXEL_SIZE=hdf5->GetPixelSize(), $ OUTPUT_COORDINATE_SYSTEM_CODE=hdf5->GetSpatialRefCode(), $ OUTPUT_INTERLEAVE=hdf5->GetInterleave(), $ OUTPUT_DATA_TYPE=hdf5->GetDataType()) ``` 这个脚本将创建一个GLT文件并设置几何校正参数。其中,glt是一个ENVIGeometricCorrectionRaster对象,表示GLT文件;gltpath是GLT文件的保存路径;DATASET_NAME是输入数据集的名称;SPATIAL_REF_OBJ和SPATIAL_REF_CODE是输入数据的空间参考对象和空间参考代码;PIXEL_SIZE是输入数据的像素大小;UL_LATITUDE和UL_LONGITUDE是输入数据的左上角经纬度坐标;ROTATION_ANGLE是输入数据的旋转角度;OUTPUT_PIXEL_SIZE、OUTPUT_COORDINATE_SYSTEM_CODE、OUTPUT_INTERLEAVE和OUTPUT_DATA_TYPE是输出数据的相关参数。 4. 运行几何校正。在IDL中输入以下脚本: ``` outputpath = FILEPATH('output_file.h5', SUBDIRECTORY=['data'], $ ROOT_DIR=['/']) geocorrect = ENVIGeometricCorrection(input_file, $ OUTPUT_URI=outputpath, $ GLT=glt, $ SPATIAL_REF_OBJ=hdf5->GetSpatialRef(), $ SPATIAL_REF_CODE=hdf5->GetSpatialRefCode(), $ PIXEL_SIZE=hdf5->GetPixelSize(), $ OUTPUT_INTERLEAVE=hdf5->GetInterleave(), $ OUTPUT_DATA_TYPE=hdf5->GetDataType()) ``` 这个脚本将执行几何校正操作,并将结果保存到指定路径的HDF5文件中。其中,geocorrect是一个ENVIGeometricCorrection对象,表示几何校正操作;input_file是输入数据文件;OUTPUT_URI是输出数据文件的保存路径;GLT、SPATIAL_REF_OBJ、SPATIAL_REF_CODE、PIXEL_SIZE、OUTPUT_INTERLEAVE和OUTPUT_DATA_TYPE是与GLT文件相同的参数。 以上就是使用ENVI IDLHDF5数据建立GLT进行几何校正的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就是一只白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值