python把hdf转为tif_在IDL下hdf(4)批量转tif,hdf(4)指modis mod10、mod13...

以下文字转自李旭科学网博客,文件和代码请在原网址查看http://blog.sciencenet.cn/blog-1148346-841353.html

MODIS数据通常是HDF-EOS(H4)文件,文件包含有多个数据集,如图1。已知

MOD13A3.hdf,提取其中的NDVI数据集,并以GeoTiff格式存储。参考GDAL方法,但没有找到Python+GDAL代码实例,所以网上介绍的方法没有测试成功,此外还有国外的专家制作的PyHDF软件,可以尝试。

我的代码有一个缺陷,不能自HDF文件获取其中地理参考。不过,我想到一个替代方法,MODIS产品附有行列信息(h**v**),将某一行列的文件在ENVI中另存为GeoTiff文件(

GEOREF.tif),IDL读取这个文件地理参考再存储在输出的NDVI数据集中。

这算是一个折中的办法,代码中对应GeoRef参数是为包含地理参考。

-------------------------------------------------------------------------

我写的程序是处理mod10,有需要的可直接修改文件路径,非常感谢李旭提供的geo参考思路,不然hdf直接存tif没有地理参考,无法做laystack等操作,批量裁剪和投影的话推荐大家使用envi

laystack操作将文件合并成一个,单个文件做裁剪和投影即可,非常方便无需写程序了。无法提交程序,只好贴上。pro

readhdfdata 和文件名一定要一致否则无法运行!

pro

readhdfdata

COMPILE_OPT IDL2

;主要方法参考李旭,http://blog.sciencenet.cn/blog-1148346-841353.html

filelist =

FILE_SEARCH('E:\hdf\2002', '*.HDF', COUNT=COUNT)

;寻找当前文件中后缀名为.hdf的文件,并将所有的结果存入FILELIST中

;注意数组是从0开始

;envi是从1开始

for i = 0

, count-1 do begin

print, filelist[i]

;打开HDF接口并初始化HDF接口

sd_id =

HDF_SD_START(filelist[i],/read)

Geopath='E:\hdf\MOD10A2.A2001009.h26v05.tif'

Geo=read_tiff(Geopath,

GEOTIFF=GeoRef)

;注意这里是sds_id不是sd_id

;0表示第一个数据集,数据集顺序可在mctk工具中查看,mod10只有两个数据集,此处提取的是maximum snow

extent

sds_id = HDF_SD_SELECT(sd_id,

0)

; Read the data : you can notice that here, it

is not needed to allocate the data array yourself

HDF_SD_GETDATA, sds_id, data

;HDF_SD_GETDATA, sds_id, data, start = start,

count = edges

; end access to SDS

HDF_SD_ENDACCESS, sds_id

; close the hdf file

HDF_SD_END, sd_id

;strmid字符串截取

name_write=strmid(filelist[i],11,24)

print,name_write

Write_tiff, 'E:\hdf\2002tif\'+name_write+'.tif',

data, GEOTIFF=GeoRef

endfor

END

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值