01 说明

关于HDF5文件的读取如果想详细了解可以查阅下方代码,写的比较详细;如果想直接使用,请在下方位置处填写好自己电脑HDF5文件的一些环境信息即可进行GLT文件的几何校正。

02 完整代码

; 该函数用于获取hdf5文件的数据集数据和数据集的属性
function get_hdf5, file_path, ds_path, att_path  ; 传参:文件路径,数据集路径; 获取hdf5文件的idhdf_id = H5F_OPEN(file_path); 获取数据集idds_id = H5D_OPEN(hdf_id, ds_path); 获取数据集数据ds = H5D_READ(ds_id); 判断是否获取属性信息if att_path then beginatt = H5A_OPEN_NAME(ds_id, att_path)return, attendif; 关闭已打开的hdf5文件H5F_CLOSE, hdf_id; 返回值(注意,是return, ds 而不是return ds)return, ds
end; 本程序使用二次开发接口进行glt文件的创建并基于glt文件对影像进行校正最后输出为TIFF格式
pro glt_parallelstart_time1 = systime(1); 输入路径(存放HDF5文件的文件夹)in_path = 'D:\ENVI_Exercise\fy3'; 输出路径(输出TIFF文件<已进行GLT校正>的文件夹)out_path = 'D:\ENVI_Exercise\fy3\glt_data1'; 需要校正的数据集的路径(以下简称校正数据集)ds_path = 'EV_RefSB'; 校正数据集的缺失值属性(_FillValue),比例系数(scale_factor)fv_name = '_FillValue'sf_name = ''  ; 如果无该属性,赋值为 sf_name = ''; 二次开发接口的环境设置(由于这里需要使用envi的api接口,所以需要声明)compile_opt idl2envi,/restore_base_save_filesenvi_batch_init; 获取输入路径中所有HDF5文件的路径paths_arr = file_search(in_path, '*.he5', count=hdfs_count)  ; hdfs_count表示该文件夹中hdf5文件的个数; 进入循环对每一个HDF5文件进行GLT文件的创建并进行几何校正最后转化为TIFF文件for hdf_i = 0, hdfs_count - 1 do beginstart_time2 = systime(2); 获取当前循环下hdf5文件的路径path = paths_arr[hdf_i]; 获取当前循环下hdf5文件的经纬度数据集lon = get_hdf5(path, 'Longitude', '')lat = get_hdf5(path, 'Latitude', ''); 获取校正数据集ds = get_hdf5(path, ds_path, ''); 获取校正数据集的缺失值并进行scale处理; 获取校正数据集的属性_FillValue, scale_factorfv = get_hdf5(path, ds_path, fv_name)if sf_name then beginsf = get_hdf5(path, ds_path, sf_name); scale处理ds = (ds ne fv[0]) * ds * sf[0]  ; 注意返回的属性值是以数组形式返回endif; 当前循环下输出路径的设置lon_out = out_path + '\Longitude.tif'lat_out = out_path + '\Latitude.tif'ds_out = out_path + '\ds.tif'; 由于ds维度是[2048, 1800, 7], 而write_tiff需要[7, 2048, 1800]的样式,所以需要修改ds_size = size(ds)new_ds = fltarr(ds_size[3], ds_size[1], ds_size[2])for i = 0, ds_size[3] - 1 do beginnew_ds[i, *, *] = ds[*, *, i]endfords = new_ds  ; 这是临时加的代码,我懒得改后面的代码所以这里又重新赋值回去了WRITE_TIFF, lon_out, lon, /floatWRITE_TIFF, lat_out, lat, /floatWRITE_TIFF, ds_out, ds, /float; 打开刚刚存储的文件(使用ENVI的api打开)ENVI_OPEN_FILE, lon_out, R_FID=lon_idENVI_OPEN_FILE, lat_out, R_FID=lat_idENVI_OPEN_FILE, ds_out, R_FID=ds_id; 输出glt文件的路径glt_out = out_path + '\glt.img'glt_hdr_path = out_path + '\' + 'glt.hdr'; 输出校正之后的数据集存放路径final_ds_out = out_path + '\' + FILE_BASENAME(path, '.he5') + '.img'final_ds_hdr_out = out_path + '\' + FILE_BASENAME(path, '.he5') + '.hdr'; 输入输出的投影信息in_prj = ENVI_PROJ_CREATE(/GEOGRAPHIC)out_prj = ENVI_PROJ_CREATE(/GEOGRAPHIC); 创建GLT文件ENVI_DOIT, 'ENVI_GLT_DOIT', dims=dims, i_proj=in_prj, o_proj=out_prj, $out_name=glt_out, pixel_size=pixel_size, rotation=0.0, $x_fid=lon_id, y_fid=lat_id, x_pos=0, y_pos=0, r_fid=glt_id; 利用创建好的glt文件进行几何校正ENVI_DOIT, 'ENVI_GEOREF_FROM_GLT_DOIT', fid=ds_id, glt_fid=glt_id, $pos=0, out_name=final_ds_out; 将所有打开的文件全部关闭envi_file_mng, id=lon_id, /REMOVEenvi_file_mng, id=lat_id, /REMOVEenvi_file_mng, id=ds_id, /REMOVEenvi_file_mng, id=glt_id, /REMOVEprint, 123; 删除中间文件file_delete, [lon_out, lat_out, ds_out, glt_out, glt_hdr_path]end_time2 = systime(2)print, file_basename(path) + ' 几何校正成功, 用时: ' + strcompress(string(end_time2 - start_time2)) + ' s.'endforend_time1 = systime(1)print, '程序运行完毕! 用时: ' + strcompress(string(end_time1 - start_time1)) + ' s.'
end

以下是实操输出:

(创建GLT文件太慢了,代码执行过程我就不等了,已经实验过是可以正常显示的)

(代码输出结果)


如果有问题,欢迎一起探讨.

<p>炒茄子</p>

ENVI_IDL:(批量处理)如何对HDF5文件进行GLT文件的创建并进行几何校正最终输出为IMG格式?相关推荐

  1. ENVI_IDL:批量重投影ModisSwath产品(调用二次开发接口)+解析

    目录 1. 课堂内容 1. 获取Modis Swath数据(这里只获取Lat.Lon.Aod(气溶胶厚度)三个数据集以及aod数据集的两个属性),并对aod数据进行简单的处理 2. 调用二次开发接口以 ...

  2. 【C语言】万字讲解 从零到精通 (文件操作与文件函数)

    C语言运行时会把数据放在内存中,而内存中的数据是临时的,随着程序的退出,系统内存中的数据也会随着给回收与销毁. 那如何把数据保存起来呢?一般数据保存的方法有,把数据存放在磁盘文件.存放到数据库等方式. ...

  3. ENVI: 如何创建GLT文件并基于GLT对图像进行几何校正?

    这是一条目录 目录 这是一条目录 01 什么是GLT文件 02 案例 1. 打开ENVI软件 1.1 软件界面显示效果如下 2. 加载需要基于GLT进行几何校正的风云三号卫星影像数据 3. 寻找 建立 ...

  4. ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析

    目录 1. 课堂内容 2. 知识储备 3. 编程 1. 课堂内容 读取OMI数据(HDF5)并输出为Geotiff文件,最重要的是数据的处理以及输出 这里我个人觉得难度不大, 第一,获取OMI文件的N ...

  5. python批量pdf转word,python批量实现Word文件转换为PDF文件

    本文为大家分享了python批量转换Word文件为PDF文件的具体方法,供大家参考,具体内容如下 1.目的 通过万能的Python把一个目录下的所有Word文件转换为PDF文件. 2.遍历目录 作者总 ...

  6. expect脚本同步文件、 expect脚本指定host和要同步的文件 、 构建文件分发系统 、批量远程执行命令...

    为什么80%的码农都做不了架构师?>>>    20.31 expect脚本同步文件 使用expect脚本同步文件 说明:核心命令是rsync #! /usr/bin/expect ...

  7. 【windwos bat】批量把windows下的wav文件转为raw文件

    借助工具sox,可以批量将wav文件转为raw文件. @echo off set work_path=recordings set raw_path=raw SET mypath=%~dp0mkdir ...

  8. python批量下载网页文件-超简单超详细python小文件、大文件、批量下载教程

    按照不同的情况,python下载文件可以分为三种: 小文件下载 大文件下载 批量下载 python 小文件下载 流程:使用request.get请求链接,返回的内容放置到变量r中,然后将r写入到你想放 ...

  9. SubRenamer – 字幕批量重命名,自动匹配视频文件与字幕文件[Windows]

    简介: SubRenamer 是一款能够为字幕批量重命名的 Windows 工具,它能自动匹配视频文件与字幕文件,并一键批量重命名,以便让视频播放器自动加载对应字幕的 Windows 工具 网盘下载地 ...

最新文章

  1. zend studio自动添加文件注释和方法注释
  2. 【Android 应用开发】 自定义 圆形进度条 组件
  3. Python 技术篇-使用pygame库播放音乐没有声音问题解决办法
  4. linux程序加载器,Linux 动态连接加载器 ld-linux用法
  5. Java是如何实现跨平台的?原理是什么?
  6. Vue2.0通过二级路由实现页面切换
  7. mysql外键设置sql语句,SQL Server 2008之SQL语句外键
  8. php中计算时间差的几种方法,PHP 中计算时间差的几种方法
  9. 带栩字的优美古诗句_带栩字的名字_以栩字起名-尚名网
  10. 限制本机访问某一些网站,本人不再花时间看新闻了
  11. C - Write the program expr which evaluates a reverse Polish expression from the command line
  12. This Python interpreter is in a conda environment问题解决
  13. 高考必胜|东方星书法祝全体考生旗开得胜,金榜题名
  14. Linux资源控制-CPU和内存
  15. HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 html网页规划与设计
  16. vue根据pc端、移动端做路由适配
  17. python数据去重_python 大数据去重
  18. 华为鸿蒙os 新闻,华为P50无限延期,谁来组成华为鸿蒙OS“头部”?
  19. python手机脚本精灵使用教程_pygame 精灵的行走及二段跳的实现方法(必看篇)
  20. 2022高压电工国家题库模拟考试平台操作

热门文章

  1. 《数据结构学习指导与习题解析》-树
  2. Django基础之Admin后台数据管理
  3. Pytorch 模型load各种问题解决
  4. c语言-----整型数据类型详解
  5. root卡刷安卓10,安卓11卡刷root
  6. 百兆宽带如何锦上添花?路由器、终端都有小“窍门”
  7. Oracle笔记 之 递归查询
  8. 【LOJ520】「LibreOJ β Round #3」绯色 IOI(开端)
  9. 如何设置用计算机程序打开方式,电脑的全部软件打开方式被设置为window plye了,怎么修改...
  10. 同为科技(TOWE)机柜PDU电源插头类型详解