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

IDL打开科学数据集

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

山科-宿鑫 2018.4.13

IDL作为一种语言,应用其实并不广泛,其中遥感类用的比较多,这包括NASA(美国宇航局)、DLR(德国宇航局)。遥感数据中有一种科学数据集,是NASA推崇的,格式为HDF-EOS跟HDF5,下面介绍如何用IDL来解析它们。
IDL8.3后版本,推出了一个新函数:H5_LIST.proH5_GETDATA.pro,可以轻松获取H5的数据。下面来演示一下:
H5_LIST,'I:\VIIRS_AOD\GAERO-VAOOO_npp_d20170210_t0640220_e0646024_b27409_c20171030130915224552_noaa_ops.h5'

然后,我想获取其中一个字段的数据:

可以看到已经正确读取到了数据。
但是知道8.5还是没有类似于H5这样的函数应用于HDF数据,下面提供了一个简单的函数来获取HDF数据,注意的是,没加任何错误处理:
HDF_LIST.pro

;+
;@作者:宿鑫
;@time:2017
;@功能:获取HDF数据集中的数据名称
;@参数:File:HDF文件
;-

PRO HDF_LIST,File

  COMPILE_OPT IDL2

  hdf_id = HDF_SD_START(File,/READ)

  HDF_SD_FILEINFO,hdf_id,datasetnum,Attributes

  FOR i = 0,datasetnum-1 DO BEGIN
    DatasetID = HDF_SD_SELECT(hdf_id,i)
    HDF_SD_GETINFO,DatasetID,name = dataset_name,natts = dstNum
    PRINT,dataset_name
    HDF_SD_ENDACCESS,DatasetID
  ENDFOR

  HDF_SD_END,hdf_id

END

HDF_GetData.pro

;+
;@作者:山科-宿鑫
;@time:2017
;@功能:获取HDF数据相应字段的数据
;@参数:file:HDF文件,Field:数据名称,使用HDF_LIST.pro获取
;-

FUNCTION HDF_GETDATA,File,Field

  COMPILE_OPT IDL2

  hdf_id = HDF_SD_START(File,/READ)

  sds_index = HDF_SD_NAMETOINDEX(hdf_id,Field)

  dst_id = HDF_SD_SELECT(hdf_id,sds_index)

  HDF_SD_GETDATA,dst_id,data

  HDF_SD_ENDACCESS,dst_id
  HDF_SD_END,hdf_id

  RETURN,data

END

用法跟H5一模一样,首先是获得需要的字段:
HDF_LIST,'I:\H8Person\MODIS\MYD13\152\MYD13C2.A2017152.006.2017192081419.hdf'

再获取数据:

2018.11.15号更新

NetCDF(.nc)文件获取数据

;+
; :DESCRIPTION:
;    Describe the procedure.
;    NCFile:NETCDF文件
;    fieldName:需要提取的字段
;    返回值:数据数组

; :AUTHOR: SUXIN
; 2018.11
;-
function NC_Getdata,NCFile,fieldName

  COMPILE_OPT IDL2
  
  NCID = NCDF_OPEN(NCFile)

  DATAID = NCDF_VARID(NCID, fieldName)
  if DATAID eq -1 then begin
    print,'没有此字段'
    return,!NULL
  endif
  NCDF_VARGET, NCID, DATAID, Data

  return,Data
 
end

源码下载链接:https://download.csdn.net/download/wudixinxin/10347713


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

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

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