IDL学习笔记(三)OMI数据处理。hdf5文件读取,图像反转,GeoTiff区别,月季年均值计算提取输出,单位转换,运行时间计算

modis Level 2 grid 数据是全球格网化数据。一天的数据全在其中。
modis Level 1 和 2 数据是一景一景的影像。

hdf5文件读取

hdf explor中,看起来像 “ 文件夹 ”一样,通俗可以叫做组。hdf5 与 hdf4不同,hdf5 不能只有数据集的名字,必须也有完整组名,才能被完整找到读出。

读取HDF5数据的一般步骤·
1、打开HDF5文件,获取文件id·
2、获取数据集名
3、将数据集名转换为数据集id
4、从数据集id处读取数据·
5、关闭数据集和文件

hdf5文件读取:

function hdf5_data_get,file_name,dataset_name
  file_id = h5f_open(file_name)
  dataset_id = h5d_open(file_id,dataset_name) ;直接返回id 而不是index
  data = h5d_read(dataset_id)
  h5f_close,dataset_id
  h5d_close,file_id
  return,data
  data = !null ;销毁data, 清空内存
 end

注意与hdf4文件读取,相区分:

function hdf4_data_get, file_name,sds_name
  sd_id = hdf_sd_start(file_name,/read)
  sds_index = hdf_sd_nametoindex(sd_id,sds_name)
  sds_id = hdf_sd_select(sd_id,sds_index)
  hdf_sd_getdata,sds_id,data
  hdf_sd_endaccess,sds_id
  hdf_sd_end,sd_id
  return,data
end

单位转换,输出hdf5数据集的图像,并检查图像经纬度是否正确,若错误,则进行翻转等操作

function hdf4_data_get, file_name,sds_name
  sd_id = hdf_sd_start(file_name,/read)
  sds_index = hdf_sd_nametoindex(sd_id,sds_name)
  sds_id = hdf_sd_select(sd_id,sds_index)
  hdf_sd_getdata,sds_id,data
  hdf_sd_endaccess,sds_id
  hdf_sd_end,sd_id
  return,data
end

function hdf5_data_get,file_name,dataset_name
  file_id = h5f_open(file_name)
  dataset_id = h5d_open(file_id,dataset_name) ;直接返回id 而不是index
  data = h5d_read(dataset_id)
  h5d_close,dataset_id ; h5d 关闭数据集
  h5f_close,file_id ; h5f 关闭文件
  return,data
  data = !null ;销毁data, 清空内存
 end

pro omi_no2_output
  file_name = 'E:/Data/IDL/chapter_2/NO2/2017/OMI-Aura_L3-OMNO2d_2017m0101_v003-2018m0627t042221.he5'
  dataset_name = '/HDFEOS/GRIDS/ColumnAmountNO2/Data Fields/ColumnAmountNO2TropCloudScreened'
  out_directory = 'E:/Data/IDL/chapter_2/result/'
  
  ;测试out_directory的目录(/directory)是否存在,若不存在,则创建
  dir_test = file_test(out_directory, /directory) 
  if dir_test eq 0 then begin
    file_mkdir,out_directory
  endif
  
  out_name = out_directory + file_basename(file_name,'.h5')+'.tiff' ; 舍弃文件路径,只获取基础路径,但同时舍去".he5"
  data_temp = hdf5_data_get(file_name,dataset_name)
  
  data_temp = ((data_temp gt 0.0)*data_temp*10.0^10.0)/(!const.NA);(!const.NA)是阿伏伽德罗常数,该句是转换单位 最后单位是mol/km2
  ;单位换完后,数据会变成“百”“千”量级,方便灰度拉伸
  
  ;</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值