上两篇我们分别介绍了《Berkeley Earth》和《AQICN》两个网站,今天来看一下Earth NullSchool。

这个网站的特色是风向图,之前有一篇可视化之风向图,曾经提到过这个网站,也详细介绍了风向图的技术实现原理。今天针对这个网站,再详细的介绍一下。同样,在公众号中回复“worldwind”,会提供该网站的源码Demo。

如上是该网站的一个动图效果,有兴趣的可以访问网站了解一个大概。作者在github上公布了自己的源码(和网站代码略有不同),气象数据来自NCEP,记得上周介绍的AQICN美国数据也是来自该网站,查了一下,该组织应该算是美国的国家气象局:National Centers for Environmental Prediction。

吸取上一篇的教训,直入主题。当然,想要了解风图原理的,可以看看之前写的可视化之风向图,需要对风图的数据和思路有一定了解,不然本文在理解上可能会有点吃力。

如上是具体数据列表,Mode里显示支持Air(风图),Ocean(洋流),Chem(化学物),Particulates(颗粒物),Height指向不同高度,Overlay表示叠加图层,比如风图+温度,洋流+浪高等,Control为时间轴控件,比如历史数据。点击查看不同的数据效果,不难找到对应数据的url的规范。

气象数据采用的是epak格式,二进制流,代码中提供了数据规范。如下是数据规范和对应的JSON属性:

从converter属性,该数据来自netcdf,而这个格式在之前的Berkeley Earth中也提到过,而原始数据是grib形式,以我的理解,里面应该有一个grib2netcdf2epak的过程,都提供了对应的转换工具。至于为何绕圈,我搜索了一下大概,知道一个大概优劣,但貌似都不绝对,在此就不妄论了。

对我个人而言,花时间最久的是如何以localhost方式获取该数据,因为它是HTTPS服务,做了Referer限制,对于我这个Java小白,绝对算得上是一个难题,不过反过来想,这不就是上天给我一个机会,让我学JavaWeb吗。花了不少时间,也请教了研发两位牛人,终于在Jetty+Servlet下实现了一个Java版的Proxy,是本次最有收获的地方,代码一并奉上,见笑。

有了本地代理服务,对源码进行简单的修改,让其走代理,就实现了localhost的部署,两个参数:url和type。

在地图初始化的时候,先构建了全球格网,是一个2:1的矩形,下面是经过投影后的球状格网效果,主要用于后续获取任意点在地球上的位置,进而获取对应的风速(X,Y),该方法提供了临近插值和双线性插值两种方式,该过程封装在rectangularGrid函数中。

接着,开始请求气象数据数据,解析过程封装在decodeEpak函数中:获取对应的JSON属性,全球风图是720*360大小,精度为0.5℃,每个点有X和Y两个分量,在X和Y方向的向量,米单位。

万事俱备只欠东风——起风。这里有两点,第一,平移缩放时没有任何效果的,这是因为当bounds变化时,需要根据更新后的区域重新插值,计算量比较大,而插值的价值是精度上有保证,清晰,所以这是一个取舍。第二,不仅有一个风图,还有一个栅格底图,下图蓝绿色效果图,仔细看,和风的走势是吻合的,同时鼠标点击时,能获取对应位置的属性值。

对风场向量的插值过程是在interpolateField方式中实现的,这里逻辑如下:1:创建当前窗口对应的掩膜,如上图,全部区域都是黑色(0,0,0,0),只有地球对应的区域颜色为(255, 0, 0, 1) ;2随机生成风粒子,每一个粒子有五个属性,位置(XY),风速(UV)和生命周期(t);3类似一条扫描线,遍历可视区域的每一像素点,通过掩膜判断是否在有效范围内,如果该点有效,则获取其对应的经纬度;4以全球网格为索引,获取该点对应的风场Field,保存到对应的向量场wind field,用于后面的风图效果;5根据风场的强度,对应颜色表设置当前点的颜色强度,保存到mask掩膜中,这样mask在更新时用来判断区域是否可见,更新后则用于显示地图效果,也算是一图两用。如上是初始化的核心部分,里面有很多小的细节,比如风向,在平面上,XY两个向量是直线,而在球面上,要调整为对应的经纬度,是曲线(distortion函数)。

接着,每一帧根据风图的原理,实时更新:风粒子的当前位置,根据当前位置的风速获取下一帧的位置,数据更新(createField::field.move)后则开始渲染(animate.draw),这部分在风向图原理里面有很清楚的介绍,思路完全一致,这里只是把关键点和对应函数实现对应起来,关键还是要思路,如果有意愿不妨自己调试,便一目了然。

至于鼠标点击显示当前状态,代码我没有看,不过上述过程中已经提供了位置转换,数据存储,很容易获取映射关系。

技术内容介绍完毕。

下一篇会抛开技术,从产品,数据,以及可视化效果等非技术层面上,和大家分享一下我对这三个网站的对比和想法。想要源码的同学请回复“worldwind”~

转载于:https://www.cnblogs.com/fuckgiser/p/6952122.html

可视化之Earth NullSchool相关推荐

  1. 全球大气监控https://earth.nullschool.net

    https://earth.nullschool.net

  2. 风场可视化与原理剖析

    最近因为项目需要,做风场可视化,也不是什么新鲜的东西了,站在前人的肩膀上鼓捣了两天也算是完成了,特此记录一下. 网上关于风场可视化的文章也挺多,可以拜读以下几位博主文章,在此表示感谢. 数据可视化之风 ...

  3. arcgis风向_数据可视化之风向图

    很多人都见过风向图,直观形象,也是地图数据和现实数据在可视化上很好的结合. 这是我见的第一个风向图,记得是2012年吧,当时觉得很有意思,作为一名技术人员,自然好奇它是如何做到的,是Canvas还是S ...

  4. PoPo数据可视化周刊第二期

    PoPo数据可视化 聚焦于Web数据可视化领域, 发现前端可视化领域有意思的内容. 涵盖前端可视化领域最新资讯, 开源可视化库的发布更新消息, 可视化案例分析与讲解, 可视化技术文章, 可视化大神的日 ...

  5. 卫星发现,这里用十年逆转了千年!

    以下内容 影像.地形以及气象数据 都来自卫星观测 记录我们与这个星球如何共处 并解决自身的发展问题 这是我们的星球 这也是我们的星球 地球表面的气体流动 被卫星和超级计算机所感知 它们带来降雨或干旱 ...

  6. 地理(GIS)教学神器:气象地球生成器

    地理教学中,不管是高中还是初中,都会涉及到大气运动的相关教学,并且,高中阶段的大气运动知识对很多学生来说相对比较复杂,如: (三圈环流) (青藏高原对西风带的影响) 因为季风气候因季节而变,所以在讲解 ...

  7. Arcgis制作风速风向

    reserachget上的一个相关问题 如何处理风速风向Arcgis博客帮助 一个杜克大学的python工具Marine Geospatial Ecology Tools 关于ATan2函数的介绍:A ...

  8. 各种实用网站收集整理,不定期更新

    超实用网站收藏整理,不定期更新 1.英国大使馆开设的英语学习平台,涵盖内容丰富.看听说写.雅思.商务英语.应用程序.课程等各种资源应有尽有. 网址:learnenglish.britishcounci ...

  9. 100个有趣的网站,快来看看吧

    下面提供100个有趣的网站,供大家学习休闲娱乐: 1.实时地球 网址:https://zoom.earth/ 实时图像每 10 分钟更新一次,提供风暴.天气预报.降水.火警等数据 2.陕西博物馆 36 ...

最新文章

  1. 区块链是互联网未来十年中举足轻重的技术
  2. 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( JNI 传递 Bitmap | 获取位图信息 | 获取图像数据 | 图像数据过滤 | 释放资源 )
  3. ajax跨域请求Flask后台
  4. java有any类型吗_Java开发网 - 一个关于CORBA中any类型的问题
  5. 小波阈值图像去噪的实现步骤
  6. Vue 页面如何利用生命周期函数监听用户预览时长
  7. Shell命令之ps获取指定进程的进程号
  8. Android程序的“现场保护”
  9. boost准模板库内存管理中pool和object_pool的使用
  10. Nhibernate与Castle windsor (个人学习笔记1)
  11. pip换源及指令的使用
  12. pyqsplitter 保持一个窗口不能拖动_Axure教程:左侧导航如何自适应浏览器窗口高度?...
  13. 复旦sakai安装指南
  14. XML Notepad 2007 汉化版发布
  15. python中右对齐_python右对齐的实例方法
  16. 【原创】2019.08.15 模拟赛 ※ [USACO19]Left Out / [USACO19]Cow Steeplechase II / bzoj 4972 小Q的方格纸
  17. 世界足坛十大球队球星全力出击
  18. PHP C#-QQ网站bkn算法
  19. IIS启动就报错:发生意外错误0x8ffe2740
  20. 【JavaScript系列】JS基础语法_从变量到数组一网打尽_有教程有实战

热门文章

  1. 幸运的背后,总是靠自身的努力在支撑
  2. Jzoj5429 排列
  3. 【转】ROWNUM与ORDER BY先后关系
  4. Spring框架集成mybatis框架的配置(笔记)
  5. MVC 登陆注册页面
  6. 【MOSS】SPListItems操作
  7. 一道微软公司的面试题目的算法实现
  8. Atlas, AJAX
  9. 10.10 traceroute:追踪数据传输路由状况
  10. php论坛怎么架设,论坛架设有诀窍 phpWind配置技巧三则