山科-宿鑫 2018.4.13
IDL
作为一种语言,应用其实并不广泛,其中遥感类用的比较多,这包括NASA(美国宇航局)、DLR(德国宇航局)。遥感数据中有一种科学数据集,是NASA推崇的,格式为HDF-EOS跟HDF5,下面介绍如何用IDL来解析它们。
IDL8.3
后版本,推出了一个新函数:H5_LIST.pro
跟H5_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