HDF更新数据:对原有HDF数据进行数据更新,不破坏HDF的数据结构

pro add_data_sst
;实现将SST增加1度,再将结果更新到SST中
;1. 获取SST索引
;2. 通过索引获取ID
;3. 获取SST数组
;4. 对数组进行操作
;5. 将数值进行更新
cd, 'D:\McDelfino\dell-dev\IDL'
file='D:\McDelfino\dell-dev\IDL\A20080200505006.L2_LAC' ;打开HDF文件,获取SD ID,注意使用关键字RDWR,可以读写HDF文件。
sd_id=HDF_SD_START(file, /RDWR) ;获取SD中SST的索引
sstIndex = HDF_SD_NAMETOINDEX(sd_id,'sst') ;获得SST所在索引的ID
SSTSD_ID = HDF_SD_SELECT(sd_id, sstIndex) ;读取SST数据
HDF_SD_GETDATA, SSTSD_ID, SSTData ;获取sst的实际值
;slope=0.005, intercept=0.0
realSSTData = SSTData * 0.005 + 0.0
;处理SST数据
tempSSTData = realSSTData+1
;从真实值返回
newSSTData = (tempSSTData - 0.0)/0.005 ;将新数据写出,更新原有数据
HDF_SD_ADDDATA, SSTSD_ID, newSSTData ;关闭SD,关闭HDF文件
HDF_SD_ENDACCESS, SSTSD_ID
HDF_SD_END, sd_id end

新建HDF文件:将原HDF中的数据进行计算,将结果写入新的HDF文件中

pro readandcreate
;实现数据的计算以及新建数据
;1. 读取经纬度数据
;2. 读取SST数据,并存到数组中
;3. 读取Rrs数据,并进行计算获取SD、TSM、CHL结果,存到数组中
;4. 新建HDF,将经纬度以及结果写入进去 file='D:\McDelfino\dell-dev\IDL\A20080200505006.L2_LAC'
hdfid=HDF_SD_START(file, /rdwr) ;读取数据中的lat数据
;通过latitude来获取相应的索引值
index=HDF_SD_NAMETOINDEX(hdfid, 'latitude')
;通过索引值获取ID值
varid=HDF_SD_SELECT(hdfid, index)
;通过ID值获取数组值
HDF_SD_GETDATA, varid, latdata
help,latdata ;读取数据中的lon数据
index=hdf_sd_nametoindex(hdfid, 'longitude')
varid=hdf_sd_select(hdfid, index)
hdf_sd_getdata, varid, londata ;读取数据中的sst数据,有数据的进行计算,mask的部分赋值为NaN
sstdata1=dindgen(1354,2040) index=hdf_sd_nametoindex(hdfid, 'sst')
varid=hdf_sd_select(hdfid, index)
hdf_sd_getdata, varid, sstdata for i=0, 1354-1 do begin
for j=0, 2040-1 do begin
if(sstdata[i,j] gt -32767) then begin
sstdata1[i,j]=sstdata[i,j]*0.005
endif else begin
sstdata1[i,j]='nan'
endelse
endfor
endfor ;读取数据中的Rrs_667数据,有数据的进行SD的计算,mask的部分赋值为NaN
rrs667data1=dindgen(1354,2040)
sddata1=dindgen(1354,2040) index=hdf_sd_nametoindex(hdfid, 'Rrs_667')
varid=hdf_sd_select(hdfid, index)
hdf_sd_getdata, varid, rrs667data for i=0, 1354-1 do begin
for j=0, 2040-1 do begin
if(rrs667data[i,j] gt -32767) then begin
rrs667data1[i,j]=rrs667data[i,j]*(2.0E-6) + 0.05
;只对正数进行计算
if(rrs667data1[i,j] gt 0) then begin
sddata1[i,j]=-85.666-108.807*alog10(rrs667data1[i,j])-45.591*(alog10(rrs667data1[i,j]))^2.0-6.426*(alog10(rrs667data1[i,j]))^3.0
endif else begin
sddata1[i,j]='nan'
endelse
endif else begin
sddata1[i,j]='nan'
endelse
endfor
endfor ;读取数据中的Rrs_645数据,有数据的进行TSM的计算,mask的部分赋值为NaN
rrs645data1=dindgen(1354,2040)
tsmdata1=dindgen(1354,2040) index=hdf_sd_nametoindex(hdfid, 'Rrs_645')
varid=hdf_sd_select(hdfid, index)
hdf_sd_getdata, varid, rrs645data for i=0, 1354-1 do begin
for j=0, 2040-1 do begin
if(rrs645data[i,j] gt -32767) then begin
rrs645data1[i,j]=rrs645data[i,j]*(2.0E-6) + 0.05
;只对正数进行计算
if(rrs645data1[i,j] gt 0) then begin
tsmdata1[i,j]=1.572+2172.239*rrs645data1[i,j]
endif else begin
tsmdata1[i,j]='nan'
endelse
endif else begin
tsmdata1[i,j]='nan'
endelse
endfor
endfor ;读取数据中的Rrs_488/Rrs_547数据,有数据的进行CHL的计算,mask的部分赋值为NaN
rrs488data1=dindgen(1354,2040)
rrs547data1=dindgen(1354,2040)
chldata1=dindgen(1354,2040) index=hdf_sd_nametoindex(hdfid, 'Rrs_488')
varid=hdf_sd_select(hdfid, index)
hdf_sd_getdata, varid, rrs488data index=hdf_sd_nametoindex(hdfid, 'Rrs_547')
varid=hdf_sd_select(hdfid, index)
hdf_sd_getdata, varid, rrs547data for i=0, 1354-1 do begin
for j=0, 2040-1 do begin
if(rrs488data[i,j] gt -32767) then begin
rrs488data1[i,j]=rrs488data[i,j]*(2.0E-6) + 0.05
rrs547data1[i,j]=rrs547data[i,j]*(2.0E-6) + 0.05
;只对正数进行计算
if(rrs488data1[i,j] gt 0 && rrs547data1[i,j] gt 0) then begin
R=alog10(rrs488data1[i,j]/rrs547data1[i,j])
chldata1[i,j]=10^(4.608-14.742*R+22.025*R^2-13.509*R^3)
endif else begin
chldata1[i,j]='nan'
endelse
endif else begin
chldata1[i,j]='nan'
endelse
endfor
endfor ;读取数据中的chlor_a数据,有数据的进行计算,mask的部分赋值为NaN
chlordata1=dindgen(1354,2040) index=hdf_sd_nametoindex(hdfid, 'chlor_a')
varid=hdf_sd_select(hdfid, index)
hdf_sd_getdata, varid, chlordata for i=0, 1354-1 do begin
for j=0, 2040-1 do begin
if(chlordata[i,j] gt -32767) then begin
chlordata1[i,j]=chlordata[i,j]*1.0
endif else begin
chlordata1[i,j]='nan'
endelse
endfor
endfor hdf_sd_endaccess, varid
hdf_sd_end, hdfid ;新建HDF的文件路径
file='D:\McDelfino\dell-dev\IDL\sst23.hdf'
;以create的形式打开文件
hdfid=HDF_SD_START(file, /create)
;新建latitude变量,在HDF上显示1354列,2040行,默认是浮点型数组
sds_id=HDF_SD_CREATE(hdfid, 'latitude', [1354, 2040], /double)
;由于从HDF中读取的数据与实际数据存在一个中心对称的关系,因此通过两个reverse实现
;latdata就是从其他HDF中读取的数组,将数组的结果添加到变量latitude中去
HDF_SD_ADDDATA, sds_id, reverse(reverse(latdata), 2) sds_id=HDF_SD_CREATE(hdfid, 'longitude', [1354, 2040], /double)
HDF_SD_ADDDATA, sds_id, reverse(reverse(londata), 2) sds_id=HDF_SD_CREATE(hdfid, 'sst', [1354, 2040], /double)
HDF_SD_ADDDATA, sds_id, reverse(reverse(sstdata1), 2) sds_id=HDF_SD_CREATE(hdfid, 'sd', [1354, 2040], /double)
HDF_SD_ADDDATA, sds_id, reverse(reverse(sddata1), 2) sds_id=HDF_SD_CREATE(hdfid, 'tsm', [1354, 2040], /double)
HDF_SD_ADDDATA, sds_id, reverse(reverse(tsmdata1), 2) sds_id=HDF_SD_CREATE(hdfid, 'chl', [1354, 2040], /double)
HDF_SD_ADDDATA, sds_id, reverse(reverse(chldata1), 2) sds_id=HDF_SD_CREATE(hdfid, 'chlor_a', [1354, 2040], /double)
HDF_SD_ADDDATA, sds_id, reverse(reverse(chlordata1), 2) HDF_SD_ENDACCESS, sds_id
HDF_SD_END, hdfid end

最新文章

  1. JQuery的基础和应用
  2. ABAP BAPI 销售订单生产交货单函数
  3. Java Native Method
  4. JDK1.7-LinkedList循环链表优化
  5. php对比辨析之 mysql_escape_string & mysql_real_escape_string & addsalshes
  6. SQL Server 全文索引
  7. 数据结构大型实验的记录(done)
  8. 为什么EXE文件出现了不该出现的“盾牌”
  9. 基于Python使用SVM识别简单的字符验证码的完整代码开源分享
  10. [2015-10-11]常用git命令
  11. 安装PHP的mongodb驱动速记
  12. nand flash和nor flash的区别
  13. NPOI操作Excel(一)--NPOI基础
  14. springboot---->错误: 找不到或无法加载主类
  15. yii框架中获取添加数据后的id值
  16. 浅拷贝和深拷贝(java)
  17. CABasicAnimation使用总结
  18. Zeppelin原理简介
  19. 隐藏控件HiddenField使用
  20. mybatis mapper调用mysql存储过程

热门文章

  1. NSURLConnection和NSMutableURLRequest 实现同步、异步请求
  2. Chrome/谷歌开发者工具分析
  3. HeatMap(热图)的原理和实现
  4. linux下ndk编译命令行程序及配置
  5. jquery 获取下拉框 某个text='xxx'的option的属性 非选中 如何获得select被选中option的value和text和......
  6. HDU 1423 Greatest Common Increasing Subsequence(LICS入门,只要求出最长数)
  7. VUE 之 vuex 和 axios
  8. yum lock
  9. Serialization and deserialization are bottlenecks in parallel and distributed computing, especially in machine learning applications with large objects and large quantities of data.
  10. console调试命令