IDLHDF5读取与转换
需求决定了动力,此时近凌晨一点,忙里偷闲,终于忙完了今天的“这点儿”事儿。参考帮助文档,从hdf的读写,捉摸hdf5的读写,总算弄明白了。稍作总结,以备候查。
hdf5作为hdf数据的补充与升级,目前被新型的传感器所采用(VIIRS,风云三号等),但是如果没有hdf5的sav扩展,低于5.1版本的envi是无法打开的(扩展可以到网上搜)方便起见,花一点儿时间捉摸了下hdf5的数据读取,提取部分内容,写为hdf文件,以方便查看。
Hdf5数据重要的是几个概念:文件(File),组(Group),数据集(Dataset)。常用读的数据过程是:文件读取,组的读取和数据集的读取。

对应使用的函数是h5f_,h5g_,h5d_这三种。
常用的函数是:
h5_list可以列出一个文件中的所有的数据集,然后可以通过这些数据集,直接利用相应的read来获取数据。
H5F_IS_HDF5判断是不是h5格式的数据;H5F_OPEN打开一个文件,返回文件的id;H5G_GET_NMEMBERS可以根据组别的名字获取组的成员个数;H5G_OPEN是根据组别的名字打开一个组,得到组的id;H5G_GET_MEMBER_NAME根据元素在文件中的索引位置(从0开始)获取数据集,返回的是数据集的name;H5D_OPEN根据数据集的name打开数据集,返回数据集的id;H5D_READ是根据数据集的id获取该数据集的数据内容。然后是对应的close函数。记得,打开的数据要注意关闭。
例子:读取hdf5的数据(seadas产生的rrc数据),提取出bands组别内的所有数据集,写入到一个hdf文件中,便于其他程序访问。
PRO HDF5
;
COMPILE_OPT idl2
ENVI,/RESTORE_BASE_SAVE_FILES
ENVI_BATCH_INIT
;
hdf = 'F:\temp\A2014119053500.L2_LAC_OC_reprojected.h5'
is_h5 = H5F_IS_HDF5(hdf)
IF is_h5 EQ 0 THEN RETURN
;h5_list,hdf
hdf_id = H5F_OPEN(hdf)
group= '/bands'
elements_num = H5G_GET_NMEMBERS(hdf_id,group)
band_g_id = H5G_OPEN(hdf_id,group)
;
outpath = 'F:\temp\hdf_test.hdf'
if file_test(outpath) then file_delete,outpath
sd_id=HDF_SD_START(outpath,/CREATE)
;进度条
str=['Outpath='+outpath,'Reading and writing']
ENVI_REPORT_INIT, str, title="Processing...",base=base ,/INTERRUPT
ENVI_REPORT_INC, base, elements_num
FOR index = 0L, elements_num-1 DO BEGIN
;更新进度条
ENVI_REPORT_STAT,base, index, elements_num
;
item_Name = H5G_GET_MEMBER_NAME(hdf_id,group,index)
item_id = H5D_OPEN(band_g_id,item_Name)
;item_type_code = H5D_GET_TYPE(item_id)
;item_type = H5T_IDLTYPE(item_type_code)
item_data = H5D_READ(item_id)
;print,item_Name,typename(item_data)
;help,item_data
WRITE_HDF,sd_id,item_Name,item_data,typename(item_data)
h5d_close,item_id
ENDFOR
;close
h5g_close,band_g_id
h5f_close,hdf_id
HDF_SD_END,sd_id
envi_report_init,base=base,/finish
void = dialog_message('Processing completed!',/info)
; print, members
;envi_batch_exit
END
writehdf的pro:
PRO WRITE_HDF,sd_id,data_set_name,data,datatype
;add dataset into hdf file
;sd_id: hdf identifer;data_set_name: the name you will add
;datatype:the data type
sds_id = 1
dims = SIZE(data,/dimensions)
; datatype = '/'+datatype
CASE (datatype) OF
'LONG': BEGIN
sds_id=HDF_SD_CREATE(sd_id,data_set_name,dims[*,*],/long)
END
'FLOAT':BEGIN
sds_id=HDF_SD_CREATE(sd_id,data_set_name,dims[*,*],/float)
END
ELSE: BEGIN
sds_id=HDF_SD_CREATE(sd_id,data_set_name,dims[*,*],/DFNT_UINT32)
END
ENDCASE
HDF_SD_ADDDATA, sds_id, REFORM(data[*,*])
HDF_SD_SETINFO,sds_id,Label = data_set_name
HDF_SD_ENDACCESS,sds_id
;
END;
效果显示:


IDLHDF5读取与转换的更多相关文章
- mybatis&plus系列------Mysql的JSON字段的读取和转换
mybatis&plus系列------Mysql的JSON字段的读取和转换 一. 背景 在平常的开发中,我们可能会有这样的需求: 业务数据在存储的时候,并不是以mysql中的varchar丶 ...
- 将一个读取流转换成bitmap对象
将一个读取流转换成bitmap对象: BitmapFactory:可以将文件,读取流,字节数组转换成一个Bitmap对象. Bitmap bitmap = Bitma ...
- Java读取Excel转换成JSON字符串进而转换成Java对象
Jar包
- phantomjs读取文件转换数组
//要读取的文件路径,支持TXT和CSV var openFilepath="lieBiao.txt"; phantom.outputEncoding="GB2312&q ...
- node读取文件转换json文件
{ ".323":"text/h323" , ".3gp":"video/3gpp" , ".aab" ...
- activiti5/6 系列之--Activiti 读取并转换BPMN2文件
统一的BPMN标准,对工作流的流程定义采用BPMN统一格式.BPMN流程文件可以使用eclipse bpmn2插件开发比如eclipse bpmn2 modeler或者idea activiti插件. ...
- java 读取文件转换成字符串
public String readFromFile(File src) { try { BufferedReader bufferedReader = new BufferedReader(new ...
- SharePoint 2013 Word 转换PDF服务介绍及示例
前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有 ...
- Java读取Level-1行情dbf文件极致优化(3)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
随机推荐
- hbase 架构
由图可以client并不直接和master交互,而是与zookeeper交互,所以master挂掉,依然会对外提供读写服务, 但master挂掉后无法提供数据迁移服务. 所以说 hbase无单点故障, ...
- iptables 配置需要保存
iptables-save > /root/myiptables 将iptables规则导入到文件/root/myiptablse iptables-restore < /root/myi ...
- xcode5时代如何设置Architectures和Valid Architectures
目前ios的指令集有以下几种: 1,armv6,支持的机器iPhone,iPhone2,iPhone3G及对应的iTouch 2,armv7,支持的机器iPhone4,iPhone4S 3,armv7 ...
- Crazy Search
poj1200:http://poj.org/problem?id=1200 题意:给你一个有m种字符串,求长度为n的连续子串由多少种. 题解:网上的代码都是hash,但是本人觉得hash有问题,就是 ...
- 【转】django的ORM操作数据库样例
这个算是我看到的大全了,希望可以解决明天我希望解决的两个问题... class Blog(models.Model): name = models.CharField(max_length=100) ...
- hibernate api
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/
- Delphi常用排序
1.冒泡排序 Delphi/Pascal code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 procedure BubbleSort(var x:a ...
- Service Locator 模式
什么是Service Locator 模式? 服务定位模式(Service Locator Pattern)是一种软件开发中的设计模式,通过应用强大的抽象层,可对涉及尝试获取一个服务的过程进行封装.该 ...
- 【转】Adnroid4.0 签名混淆打包(conversion to dalvik format failed with error 1)
原文网址:http://jojol-zhou.iteye.com/blog/1220541 自己的解决方法:关闭Eclipse,再开启Eclipse就可以. 最新Eclipse3.7+android ...
- Hash(4) hashtable,hashmap
首先,我们要知道set是利使用map是实现的,因为只要利用map中的key唯一性就行了. 1.hashmap 和hashtable的区别是什么? 我们可以背出: hashtable线程安全.hash ...