当前位置: 首页 > news >正文

wordpress 开发实例镇江网站建设优化排名

wordpress 开发实例,镇江网站建设优化排名,昌平网站建设公司,智慧校园学生端登录平台本文介绍基于C 语言的netCDF库读取.nc格式的栅格文件时#xff0c;代码读取到的数据与栅格文件的实际数据不一致的解决方法。 最近#xff0c;由于需要读取ERA5气象数据#xff0c;因此使用C 语言中的netCDF库读取.nc格式文件。其中#xff0c;偶然发现在Visual Studio的代…  本文介绍基于C 语言的netCDF库读取.nc格式的栅格文件时代码读取到的数据与栅格文件的实际数据不一致的解决方法。 最近由于需要读取ERA5气象数据因此使用C 语言中的netCDF库读取.nc格式文件。其中偶然发现在Visual Studio的代码中读取到的.nc文件的数据和其实际的数据ArcMap等软件打开所显示的数据不一致这里就介绍一种可能导致上述情况的原因以及对应的解决方法。此外关于Visual Studio中配置C 语言netCDF库的方法大家可以参考在Visual Studio配置C的netCDF库的方法https://blog.csdn.net/zhebushibiaoshifu/article/details/136451536关于Python语言读取.nc数据的方法大家可以参考Python读取.nc数据并提取指定时间、经纬度维度对应的变量数值https://blog.csdn.net/zhebushibiaoshifu/article/details/136264348。 首先在C 语言的代码读取.nc格式文件时出现了如下图所示的情况可以看到这些值都是负值而实际上我这里的这个.nc格式文件肯定不应该如此。 正常情况下在ArcMap软件中打开上述这个.nc格式的文件其数值正常范围的区间应该是如下图所示肯定都是在大于0的区间内当然数据中确实可能会有NoData值但尽管如此这个.nc格式文件也不可能像上图那样出现这么多不同的负数值。 那么如果出现类似上述这样的情况大家就可以多多注意很可能是由于存在scale和offset导致的问题了。 首先什么是scale和offset呢简单来说为了存储方便.nc格式文件在保存数据的时候可能会让原本的真实数据先乘以某个数然后再加上某个数很多.tif格式的遥感影像也是这么存储的也就是常说的缩放系数。例如假设一个.nc格式文件原本的数值都是大于0、小于1的数值例如反射率数据都是0.X的数据那么直接存储小数就需要占用大量的存储空间因为需要float格式或者double格式而如果让这些数据都乘上1000或者10000也就是尽可能让小数部分消除那么就可以用int格式来存储数据从而降低了对存储空间的占用。 因此如果我们待读取的.nc格式文件含有这个scale和offset那么在使用C 语言中的netCDF库读取.nc格式文件时读到的数据就是经过缩放处理后的数据对此我们需要手动将这个缩放后的数据先乘上scale再加上offset从而得到最终的真实结果数据。这一个步骤在Python语言的netCDF库中应该是会自动帮我们处理好像是这样的因为之前用Python语言读取.nc格式文件的时候都没有注意到过这个scale和offset而在C 语言的netCDF库中就需要我们自行手动处理了。 在netCDF库的官方网站中也有关于这个scale和offset的说明——如下图所示二者在其中分别写作scale_factor和add_offset在官方网站中提到只要在.nc格式文件中看到这2个参数都需要在读取数据后自行手动将其乘以或添加到原数据中。 因此在用C 语言netCDF库读取.nc格式的栅格文件时如果我们是第一次读取它那么可以通过如下的代码获取其变量的属性。 NcFile file(path, NcFile::read);NcVar var file.getVar(type);mapstring, NcVarAtt attributes_map var.getAtts();其中NcFile file(path, NcFile::read);含义为创建一个NcFile对象path是要打开的.nc格式的栅格文件的路径NcFile::read表示以只读模式打开文件随后NcVar var file.getVar(type);表示调用file对象的getVar()方法获取了指定变量名type也就是我们需要读取的变量的NcVar对象最后mapstring, NcVarAtt attributes_map var.getAtts();调用var对象的getAtts()方法获取了变量的所有属性并将它们存储在一个mapstring, NcVarAtt对象中。在这个map中属性的名称是键对应的NcVarAtt对象是值。 其中这个attributes_map如下图所示可以看到其中是具有scale_factor和add_offset的。 但是如果此时我们直接查看这个attributes_map是看不到scale_factor和add_offset具体的值的因为它的值还是一个NcAtt对象如下图所示。 我们需要通过如下的代码首先通过.getAtt()方法获取这个属性然后用.getValues()方法获取这个属性的具体数值。 NcVarAtt attribute_offset var.getAtt(add_offset);NcVarAtt attribute_scale var.getAtt(scale_factor);double offset, scale;attribute_offset.getValues(offset);attribute_scale.getValues(scale);其中对于上述代码如果大家对变量值的精度有较高要求记得要选择double类型的变量来存储scale_factor和add_offset——如果选择的是float可能会丢失一些精度。 运行上述代码我们将得到如下图所示的结果。 可以看到scale_factor和add_offset的值都已经显示出来了。 那么我们就可以将这个scale_factor和add_offset分别作用到我们读取得到的原始数据上因为我这里.nc格式数据的数据量非常大所以我们就只处理前100个来看看其数值是否正确具体代码如下。 vectordouble var_array(time_size * latitude_size * longitude_size);var.getVar(var_array.data());for (int i 0; i 100; i) {var_array[i] * scale;var_array[i] offset;}可以看到此时得到的结果就符合实际了如下图所示。 此外我们可以在ArcGIS软件中打开这个.nc格式的数据找到其左上角的像元获取一下这个像元的数值如下图所示。 可以看到此时上图中所显示的数据就和上上图中我们在Visual Studio的代码中读取到的.nc文件的数据是一致的了。 当然这里也需要注意有些.nc格式的数据其变量也可能不含有scale_factor和add_offset这两个属性的如下图所示所以我们都可以用本文前述的代码先获取其属性看看到底有没有scale_factor和add_offset如果有的话在执行对应的数据恢复操作即可。 至此大功告成。 欢迎关注疯狂学习GIS
http://www.zqtcl.cn/news/53592/

相关文章:

  • 西安百度网站快速排名4399游戏大全
  • 网站喜报怎么做免费收录网提交
  • 网站统计 中文域名触摸屏网站如何做
  • 地方门户网站盈利wordpress 修改权限
  • 网站制作网站维护dw公司网页制作
  • 汽车网站网页模板南京市互联网平台公司
  • 建站赔补做网站的专业术语
  • 网站域名怎么购买北京海淀建设银行数据中心
  • 简述网站的建站流程培训心得模板
  • 沈阳网站设计开发上海最新注册企业
  • 做创意网站海外网站建设推广最好的
  • 网站服务器使用秦皇岛平台公司
  • WordPress建站去掉后缀wordpress栏目对应模板
  • 如何从下载的视频查到原网站wordpress商品展示插件
  • 字体图标网站长沙做网站公
  • 太原市住房和城乡建设部网站免费自助建站哪个好
  • 个人建立网站要多少钱wordpress 统一身份认证
  • 集团制度建设网站专做自驾游的网站
  • 蓝色网站风格大连网站开发选领超科技
  • 30秒网站信宜市建设局网站
  • 电子商务网站推广的目的正规小说分销平台
  • android 网站开发xiuno wordpress
  • 网站建设万首先金手指13对网站内容建设的建议
  • 网站建设及推广方案wordpress电话按钮
  • 网站设计专家入侵WordPress网站
  • 成都网站关键词优化菜鸟教程网站怎么做
  • 网站空间数据库浙大企业管理培训课程
  • 企业为什么要建设自己的网站wordpress xmmpp
  • 用什么做网站 优化微信最火的公众号排行
  • 人人车网站建设费用沈阳淘宝网站建设