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

  1. pro add_data_sst
  2. ;实现将SST增加1度,再将结果更新到SST
  3. ;1. 获取SST索引
  4. ;2. 通过索引获取ID
  5. ;3. 获取SST数组
  6. ;4. 对数组进行操作
  7. ;5. 将数值进行更新
  8. cd, 'D:\McDelfino\dell-dev\IDL'
  9. file='D:\McDelfino\dell-dev\IDL\A20080200505006.L2_LAC'
  10.  
  11. ;打开HDF文件,获取SD ID,注意使用关键字RDWR,可以读写HDF文件。
  12. sd_id=HDF_SD_START(file, /RDWR)
  13.  
  14. ;获取SDSST的索引
  15. sstIndex = HDF_SD_NAMETOINDEX(sd_id,'sst')
  16.  
  17. ;获得SST所在索引的ID
  18. SSTSD_ID = HDF_SD_SELECT(sd_id, sstIndex)
  19.  
  20. ;读取SST数据
  21. HDF_SD_GETDATA, SSTSD_ID, SSTData
  22.  
  23. ;获取sst的实际值
  24. ;slope=0.005, intercept=0.0
  25. realSSTData = SSTData * 0.005 + 0.0
  26. ;处理SST数据
  27. tempSSTData = realSSTData+1
  28. ;从真实值返回
  29. newSSTData = (tempSSTData - 0.0)/0.005
  30.  
  31. ;将新数据写出,更新原有数据
  32. HDF_SD_ADDDATA, SSTSD_ID, newSSTData
  33.  
  34. ;关闭SD,关闭HDF文件
  35. HDF_SD_ENDACCESS, SSTSD_ID
  36. HDF_SD_END, sd_id
  37.  
  38. end

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

  1. pro readandcreate
  2. ;实现数据的计算以及新建数据
  3. ;1. 读取经纬度数据
  4. ;2. 读取SST数据,并存到数组中
  5. ;3. 读取Rrs数据,并进行计算获取SDTSMCHL结果,存到数组中
  6. ;4. 新建HDF,将经纬度以及结果写入进去
  7.  
  8. file='D:\McDelfino\dell-dev\IDL\A20080200505006.L2_LAC'
  9. hdfid=HDF_SD_START(file, /rdwr)
  10.  
  11. ;读取数据中的lat数据
  12. ;通过latitude来获取相应的索引值
  13. index=HDF_SD_NAMETOINDEX(hdfid, 'latitude')
  14. ;通过索引值获取ID
  15. varid=HDF_SD_SELECT(hdfid, index)
  16. ;通过ID值获取数组值
  17. HDF_SD_GETDATA, varid, latdata
  18. help,latdata
  19.  
  20. ;读取数据中的lon数据
  21. index=hdf_sd_nametoindex(hdfid, 'longitude')
  22. varid=hdf_sd_select(hdfid, index)
  23. hdf_sd_getdata, varid, londata
  24.  
  25. ;读取数据中的sst数据,有数据的进行计算,mask的部分赋值为NaN
  26. sstdata1=dindgen(1354,2040)
  27.  
  28. index=hdf_sd_nametoindex(hdfid, 'sst')
  29. varid=hdf_sd_select(hdfid, index)
  30. hdf_sd_getdata, varid, sstdata
  31.  
  32. for i=0, 1354-1 do begin
  33. for j=0, 2040-1 do begin
  34. if(sstdata[i,j] gt -32767) then begin
  35. sstdata1[i,j]=sstdata[i,j]*0.005
  36. endif else begin
  37. sstdata1[i,j]='nan'
  38. endelse
  39. endfor
  40. endfor
  41.  
  42. ;读取数据中的Rrs_667数据,有数据的进行SD的计算,mask的部分赋值为NaN
  43. rrs667data1=dindgen(1354,2040)
  44. sddata1=dindgen(1354,2040)
  45.  
  46. index=hdf_sd_nametoindex(hdfid, 'Rrs_667')
  47. varid=hdf_sd_select(hdfid, index)
  48. hdf_sd_getdata, varid, rrs667data
  49.  
  50. for i=0, 1354-1 do begin
  51. for j=0, 2040-1 do begin
  52. if(rrs667data[i,j] gt -32767) then begin
  53. rrs667data1[i,j]=rrs667data[i,j]*(2.0E-6) + 0.05
  54. ;只对正数进行计算
  55. if(rrs667data1[i,j] gt 0) then begin
  56. 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
  57. endif else begin
  58. sddata1[i,j]='nan'
  59. endelse
  60. endif else begin
  61. sddata1[i,j]='nan'
  62. endelse
  63. endfor
  64. endfor
  65.  
  66. ;读取数据中的Rrs_645数据,有数据的进行TSM的计算,mask的部分赋值为NaN
  67. rrs645data1=dindgen(1354,2040)
  68. tsmdata1=dindgen(1354,2040)
  69.  
  70. index=hdf_sd_nametoindex(hdfid, 'Rrs_645')
  71. varid=hdf_sd_select(hdfid, index)
  72. hdf_sd_getdata, varid, rrs645data
  73.  
  74. for i=0, 1354-1 do begin
  75. for j=0, 2040-1 do begin
  76. if(rrs645data[i,j] gt -32767) then begin
  77. rrs645data1[i,j]=rrs645data[i,j]*(2.0E-6) + 0.05
  78. ;只对正数进行计算
  79. if(rrs645data1[i,j] gt 0) then begin
  80. tsmdata1[i,j]=1.572+2172.239*rrs645data1[i,j]
  81. endif else begin
  82. tsmdata1[i,j]='nan'
  83. endelse
  84. endif else begin
  85. tsmdata1[i,j]='nan'
  86. endelse
  87. endfor
  88. endfor
  89.  
  90. ;读取数据中的Rrs_488/Rrs_547数据,有数据的进行CHL的计算,mask的部分赋值为NaN
  91. rrs488data1=dindgen(1354,2040)
  92. rrs547data1=dindgen(1354,2040)
  93. chldata1=dindgen(1354,2040)
  94.  
  95. index=hdf_sd_nametoindex(hdfid, 'Rrs_488')
  96. varid=hdf_sd_select(hdfid, index)
  97. hdf_sd_getdata, varid, rrs488data
  98.  
  99. index=hdf_sd_nametoindex(hdfid, 'Rrs_547')
  100. varid=hdf_sd_select(hdfid, index)
  101. hdf_sd_getdata, varid, rrs547data
  102.  
  103. for i=0, 1354-1 do begin
  104. for j=0, 2040-1 do begin
  105. if(rrs488data[i,j] gt -32767) then begin
  106. rrs488data1[i,j]=rrs488data[i,j]*(2.0E-6) + 0.05
  107. rrs547data1[i,j]=rrs547data[i,j]*(2.0E-6) + 0.05
  108. ;只对正数进行计算
  109. if(rrs488data1[i,j] gt 0 && rrs547data1[i,j] gt 0) then begin
  110. R=alog10(rrs488data1[i,j]/rrs547data1[i,j])
  111. chldata1[i,j]=10^(4.608-14.742*R+22.025*R^2-13.509*R^3)
  112. endif else begin
  113. chldata1[i,j]='nan'
  114. endelse
  115. endif else begin
  116. chldata1[i,j]='nan'
  117. endelse
  118. endfor
  119. endfor
  120.  
  121. ;读取数据中的chlor_a数据,有数据的进行计算,mask的部分赋值为NaN
  122. chlordata1=dindgen(1354,2040)
  123.  
  124. index=hdf_sd_nametoindex(hdfid, 'chlor_a')
  125. varid=hdf_sd_select(hdfid, index)
  126. hdf_sd_getdata, varid, chlordata
  127.  
  128. for i=0, 1354-1 do begin
  129. for j=0, 2040-1 do begin
  130. if(chlordata[i,j] gt -32767) then begin
  131. chlordata1[i,j]=chlordata[i,j]*1.0
  132. endif else begin
  133. chlordata1[i,j]='nan'
  134. endelse
  135. endfor
  136. endfor
  137.  
  138. hdf_sd_endaccess, varid
  139. hdf_sd_end, hdfid
  140.  
  141. ;新建HDF的文件路径
  142. file='D:\McDelfino\dell-dev\IDL\sst23.hdf'
  143. ;以create的形式打开文件
  144. hdfid=HDF_SD_START(file, /create)
  145. ;新建latitude变量,在HDF上显示1354列,2040行,默认是浮点型数组
  146. sds_id=HDF_SD_CREATE(hdfid, 'latitude', [1354, 2040], /double)
  147. ;由于从HDF中读取的数据与实际数据存在一个中心对称的关系,因此通过两个reverse实现
  148. ;latdata就是从其他HDF中读取的数组,将数组的结果添加到变量latitude中去
  149. HDF_SD_ADDDATA, sds_id, reverse(reverse(latdata), 2)
  150.  
  151. sds_id=HDF_SD_CREATE(hdfid, 'longitude', [1354, 2040], /double)
  152. HDF_SD_ADDDATA, sds_id, reverse(reverse(londata), 2)
  153.  
  154. sds_id=HDF_SD_CREATE(hdfid, 'sst', [1354, 2040], /double)
  155. HDF_SD_ADDDATA, sds_id, reverse(reverse(sstdata1), 2)
  156.  
  157. sds_id=HDF_SD_CREATE(hdfid, 'sd', [1354, 2040], /double)
  158. HDF_SD_ADDDATA, sds_id, reverse(reverse(sddata1), 2)
  159.  
  160. sds_id=HDF_SD_CREATE(hdfid, 'tsm', [1354, 2040], /double)
  161. HDF_SD_ADDDATA, sds_id, reverse(reverse(tsmdata1), 2)
  162.  
  163. sds_id=HDF_SD_CREATE(hdfid, 'chl', [1354, 2040], /double)
  164. HDF_SD_ADDDATA, sds_id, reverse(reverse(chldata1), 2)
  165.  
  166. sds_id=HDF_SD_CREATE(hdfid, 'chlor_a', [1354, 2040], /double)
  167. HDF_SD_ADDDATA, sds_id, reverse(reverse(chlordata1), 2)
  168.  
  169. HDF_SD_ENDACCESS, sds_id
  170. HDF_SD_END, hdfid
  171.  
  172. end

【212】HDF更新数据&HDF创建的更多相关文章

  1. 常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释)

    常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释) 一. 增 INSERT INTO 数据表(字段,字段,-) VALUES(值,值-); INSERT INTO emp(empno, ...

  2. MySQL视图-(视图创建,修改,删除,查看,更新数据)

    视图是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的.视图并不在数据库中实际存在,行和列数据来自定义视图的查询总使用的表,并且是在使用视图时动态生成的. 视图相对于普通表的优势: 简单:使用视 ...

  3. HDF 文件数据的读取

    http://www.cams.cma.gov.cn/cams_973/cheres_docs/cheres_doc_sat.modis.1b.html一. HDF文件格式 1.概述 HDF 是美国国 ...

  4. SQL Server通过创建临时表遍历更新数据

    前言: 前段时间新项目上线为了赶进度很多模块的功能都没有经过详细的测试导致了生成环境中的数据和实际数据对不上,因此需要自己手写一个数据库脚本来更新下之前的数据.(线上数据库用是SQL Server20 ...

  5. MeteoInfoLab脚本示例:SeaWiFS HDF Grid数据

    SeaWiFS HDF Grid数据读取,特别是涉及到了文件的众多属性数据的读取,数据取对数后绘图.脚本程序: #Add data file f = addfile('D:/Temp/hdf/S199 ...

  6. Salesforce LWC学习(三十五) 使用 REST API实现不写Apex的批量创建/更新数据

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.224.0.api_rest.meta/api_rest/resources_compo ...

  7. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. flask+sqlite3+echarts3+ajax 异步更新数据

    结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

  9. 使用AjaxPro实现无刷新更新数据

    需求 在一个页面动态无刷新的更新后台得到的数据.要想无刷新的更新数据,需要使用Javascript能够获取后台返回的数据,然后通过第三方Javascript库(JQuery等)动态更新web页面DOM ...

随机推荐

  1. Windows下使用Nexus搭建Maven私服(使用)

    注意: 1.从3.0版本的Nexus开始,已经不再缓存https://repo1.maven.org/maven2/的包,所以当安装好之后,在界面上不会有任何的包可以搜索到,但是功能是一切正常的,只有 ...

  2. Mac Ubuntu ----端口被占用

    Mac下使用lsof(list open files)来查看端口占用情况,lsof 是一个列出当前系统打开文件的工具. 使用 lsof 会列举所有占用的端口列表: 1 $ lsof 使用less可以用 ...

  3. Android判断屏幕锁屏的方法总结

    由于做一个项目,需要判断屏幕是否锁屏,发现网上方法很多,但是比较杂,现在进行总结一下: 总共有两类方法: 一.代码直接判定 二.接收广播 现在先说第一类方法(代码直接判定): 1.通过PowerMan ...

  4. CSS - 如何实现强制不换行、自动换行、强制换行

    来源:http://www.cnblogs.com/mcat/p/4884644.html 强制不换行 div{ white-space:nowrap; } 自动换行 div{ word-wrap: ...

  5. Redhat7/centOs7 安装配置python3.6.5

    centos默认安装python2,设置py2和py3并存的方法如下: sudo yum install openssl-devel -y sudo yum install zlib-devel -y ...

  6. C++类型的转换

    C风格转换是“万能的转换”,但需要程序员把握转换的安全性,编译器无能为力:static_cast最接近于C风格转换,但在无关类指针转换时,编译器会报错,提升了安全性:dynamic_cast要求转换类 ...

  7. iOS开发之计算两个日期的时间间隔

    //首先创建格式化对象  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDate ...

  8. FastDFS的配置、部署与API使用解读(1)Get Started with FastDFS(转)

    转载请注明来自:诗商·柳惊鸿CSDN博客,原文链接:FastDFS的配置.部署与API使用解读(1)入门使用教程 1.背景 FastDFS是一款开源的.分布式文件系统(Distributed File ...

  9. DTD笔记

    DTD(Document Type Definition)文档类型定义: DTD被用于定义XML文档的结构,作为规范XML文档的一种内容模型,DTD在各领域已形成统一规范的文档. 在XML文档中使用D ...

  10. Python常用的包

    Python常用的处理数据的包和它的Tutorial(点击每个包的名称): Numpy:提供对多维数组的支持,支持矢量运算,速度快 matplotlib.pyplot:图表的绘制 Pandas:基于 ...