注册 登录
  • 注册时,本站名称为:RGB空格3S博客,注意中间的空格。
  • 2018.8.14本站全面接入google广告
  • 2017.2.14今天收到45条恶意评论(全是外文),故评论时请填写必要信息,匿名评论全部拉黑,迫不得已而为之
  • 2017.1.27,2017年春节及至,我谨代表本人祝大家新春快乐,本人年终总结文章请访问:2016年终总结
  • 为防止恶意转载,本站全面禁止复制,并添加图片水印:RGB 3S博客www.ixxin.cn。
  • 本站正式更名为RGB 3S博客,本站将撤消所有非3S内容,其将转移到新博客江湖时代

IDL学习二之打开modis hdf4文件

ID L admin 9223次浏览 已收录 0个评论
[隐藏]

前言

今天还是学习IDL,写了modis数据预处理的第一步,提取数据,数据从nasa官网下载的,网址:https://ladsweb.modaps.eosdis.nasa.gov/,实现的功能主要就是HDF文件的打开,显示,保存为ENVI可直接读取的.dat二进制数据,保存文件倒是好说,但是二进制文件,必须要有行号,列号,波段数,数据类型才能读取、写入,我不会直接写入影像,我学习ENVI,写了一个同名的.hdr文件,从而实现了在ENVI中可以直接打开保存的数据。

代码

;作者:xxin
;时间:2017.3.8
;功能:modis HDF4文件的读取,显示,保存为能直接被ENVI打开的二进制文件。
pro read_hdf
  compile_opt <a href="https://www.ixxin.cn/tag/idl/" title="查看更多关于idl的文章" target="_blank">idl</a>2
  file = DIALOG_PICKFILE(path = "G:\download\modis")
  isHdf = HDF_ISHDF(file)
  if isHdf eq 0 then return
  a = STRSPLIT(file,"\",/Extract)
  if STRCMP(a[-1], 'MOD15', 5 , /FOLD_CASE) eq  0 then begin
    Print,"数据不符合要求"
    return
  endif
  sd_id = HDF_SD_START(file,/READ)
  HDF_SD_FILEINFO,sd_id,nmfsds,atte
  FOR i=0,nmfsds-1 DO BEGIN
    sds_id=HDF_SD_SELECT(sd_id,i)
    HDF_SD_GETINFO,sds_id,name=n,ndims=r,type=t,natts=nats,hdf_type=h,unit=u
    if STRCMP(n, 'Lai_500m', 8 , /FOLD_CASE) eq  1 then BEGIN 
    lai = sds_id
    endif
  ENDFOR
  
  HDF_SD_GETDATA,lai,laidata
  i = image(laidata,/order)
  ;HDF_SD_ATTRINFO
  for j = 0,atte-1 do BEGIN
    hdf_sd_attrinfo,sd_id,j,name=a,data=b,count=c,hdf_type=d,type=e
    if STRCMP(a, 'StructMetadata.0', 16 , /FOLD_CASE) eq  1 then BEGIN 
      print,b
     endif
  endfor
  ;HDF_SD_ENDACCESS,lai
  HDF_SD_END,sd_id
  
  arr = ["ENVI","samples = 2400","lines   = 2400","bands   = 1","data type = 1","Interleave = bsq","file type = ENVI Standard","header offset = 0","byte order = 0","band names = {modis lai}","sensor type = Modis"]
  arrt = transpose(arr)  
  result_fn = "D:\ALI.dat"
  mid = STRSPLIT(result_fn,".",/EXTRACT)
  hfn = mid[0]
  hdr_fn = hfn+".hdr"
  openw,lun,hdr_fn,/GET_LUN
  printf,lun,arrt
  free_lun,lun
  openw,lun,result_fn,/GET_LUN
  writeu,lun,laidata
  free_lun,lun 
end

效果图:
效果图

后语

程序代码凌乱,不喜勿喷。本想实现直接实现地理配准,但是问题是能读到一大堆属性,但是我不会把坐标单独取出来写入头文件,尚需继续学习呀。
打赏直接扫描二维码,打赏名单请看:https://www.ixxin.cn/about.html


xxin blog , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明IDL学习二之打开modis hdf4文件
喜欢 (6)
支付宝[853060844@qq.com]
分享 (0)
admin
关于作者:
坐标山科大遥感系小鲜肉一枚。
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址