【212】HDF更新数据&HDF创建
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
【212】HDF更新数据&HDF创建的更多相关文章
- 常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释)
常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释) 一. 增 INSERT INTO 数据表(字段,字段,-) VALUES(值,值-); INSERT INTO emp(empno, ...
- MySQL视图-(视图创建,修改,删除,查看,更新数据)
视图是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的.视图并不在数据库中实际存在,行和列数据来自定义视图的查询总使用的表,并且是在使用视图时动态生成的. 视图相对于普通表的优势: 简单:使用视 ...
- HDF 文件数据的读取
http://www.cams.cma.gov.cn/cams_973/cheres_docs/cheres_doc_sat.modis.1b.html一. HDF文件格式 1.概述 HDF 是美国国 ...
- SQL Server通过创建临时表遍历更新数据
前言: 前段时间新项目上线为了赶进度很多模块的功能都没有经过详细的测试导致了生成环境中的数据和实际数据对不上,因此需要自己手写一个数据库脚本来更新下之前的数据.(线上数据库用是SQL Server20 ...
- MeteoInfoLab脚本示例:SeaWiFS HDF Grid数据
SeaWiFS HDF Grid数据读取,特别是涉及到了文件的众多属性数据的读取,数据取对数后绘图.脚本程序: #Add data file f = addfile('D:/Temp/hdf/S199 ...
- Salesforce LWC学习(三十五) 使用 REST API实现不写Apex的批量创建/更新数据
本篇参考: https://developer.salesforce.com/docs/atlas.en-us.224.0.api_rest.meta/api_rest/resources_compo ...
- CRL快速开发框架系列教程三(更新数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- flask+sqlite3+echarts3+ajax 异步更新数据
结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...
- 使用AjaxPro实现无刷新更新数据
需求 在一个页面动态无刷新的更新后台得到的数据.要想无刷新的更新数据,需要使用Javascript能够获取后台返回的数据,然后通过第三方Javascript库(JQuery等)动态更新web页面DOM ...
随机推荐
- 关于PDF的读取与绘制
本文方法参考了:官方文档.见A function that draw a PDF page的代码部分: void MyDisplayPDFPage (CGContextRef myContext, s ...
- C++类型的转换
C风格转换是“万能的转换”,但需要程序员把握转换的安全性,编译器无能为力:static_cast最接近于C风格转换,但在无关类指针转换时,编译器会报错,提升了安全性:dynamic_cast要求转换类 ...
- javaproject积累——树形结构的操作
近期一直被树形结构整的非常头大,又是递归.又是循环.可是,好在我们在经历了千辛万苦后.最终弄出来了.事实上就是组织机构的常规操作,有些是我们过度设计.有些是我们想错了.而对数的逻辑读取,我们就属于想错 ...
- STL 笔记(二) 关联容器 map、set、multimap 和 multimap
STL 关联容器简单介绍 关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素. 在 STL 中,有四种关联容器,各自是: map 键值对 key-value 存储,key 不可 ...
- Json实现异步请求(提交评论)
主要将代码粘贴,通过阅读代码理解当中的相关逻辑. html代码: <form id="form1" runat="server"> <p> ...
- Qt浅谈之二十一log调试日志
一.简单介绍 近期因调试code时,想了解程序的流程,但苦于没有一个简易的日志记录,不停使用qDebug打印输出,而终于提交代码时得去多次删除信息打印,有时还会出现新改动的代码分不清是哪些部分.而使用 ...
- openwrt 配置rsync服务
一: rsyn简介 remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息. rsync是用 “rsyn ...
- Appium基于安卓的各种FindElement的控件定位
转自:http://www.2cto.com/kf/201410/340345.html 1. findElementByName 1.1 示例 ? 1 2 el = driver.findEleme ...
- 3531: [Sdoi2014]旅行
3531: [Sdoi2014]旅行 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 1731 Solved: 772 [Submit][Statu ...
- 如何解决Windows的端口占用问题?
已知某应用在启动时会创建服务套接字,并将其绑定至端口8888,然而端口8888已被占用,如何解除占用? 以下为解决方案: 在cmd中运行netstat -ano|findstr 8888,其中的参数8 ...