Contents

用cesium显示全球模拟数据

背景

  • 测试全球模式数据展示的方法。
  • d3.js和cesium都可以将图放在3d globe上,但是cesium功能更集成,实现起来更简单。
  • 参考eWaterCycle网站例子(cesium+ncWMS)。实现:三维地球展示全球的径流数据,并能够选点展示、切换时间、使用颜色图例。

步骤

ncWMS配置

按照官方文档安装

  • ncWMS缓存问题
    需要注意的是ncWMS默认会开启Cache,占用一部分内存作为最近访问Features的缓存。由于我的测试服务器内存太少,默认安装启动后服务是卡死的,连ncWMS的tomcat容器都打不开,也没法进到ncWMS设置网页关掉缓存。因此必须在.ncWMS路径中的配置文件里修改成一个小一点值,之后就可以用设置网页实时改了。
  • ncWMS默认配置文件
    如果启动不成功,配置文件未生成,可以到https://github.com/Reading-eScience-Centre/ncwms/tree/master/config处找到配置文件。

cesium配置

  • cesium提供了sandbox环境,用于快速测试脚本。
    sandbox中有许多例子,如我用到的WMS、点击显示信息、图层透明度等调节、窗口缩放等。基于例子,复制到本地HTML也可以测试。
  • 初始化时的视角位置
    使用的是flyto功能,和其他方式的方向定义应该是一样的
    其中heading pitch roll的定义可以见http://cesium.xin/wordpress/archives/261.html
1
2
3
4
5
6
7
8
viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(111, 35, 8500000),
    orientation: {
    heading: Cesium.Math.toRadians(0.0),
    pitch: Cesium.Math.toRadians(-90.0),
    roll: Cesium.Math.toRadians(0.0)
    }
});
  • ground atmosphere效果
    一般的3d地球在缩放到足够小之后会加上大气散射效果,以模拟宇宙中观测地球的颜色。https://cesium.com/blog/2018/10/24/ground-atmosphere-lighting/ 但这个对于显示科学数据不利,因为颜色和图例对不上了。可以通过viewer.scene.globe.showGroundAtmosphere = false 关闭
  • skybox图片效果
    默认使用了6张图片作为星空背景,也可以关闭效果。参见https://blog.csdn.net/u011575168/article/details/109889699。新版的星空图片较小,分辨率低,加载快,老版的相反,可以在github里面找到。
  • 我的测试服务器带宽很小,资源加载慢
    测试用的服务器是带宽1M的阿里云,用它存放cesium.js/css的话,网页访问时下载需要6秒以上。使用jsdeliver.net的cdn之后,访问速度回到100多ms。同样skybox的背景每张都要好几百k,下载需要数秒,且下载完之后网页元素才能加载。因此把图片放七牛云CDN,在viewer.scene.skyBox里新建对象更改图片地址,最后加载速度也回到几百毫秒。
  • 点选后的提示框
    cesium自身提供了dom与js中数据结构绑定的方法,同时也有按此方式预定义的组件。比如点击globe后显示的infoBox,就是通过新建entity对象来控制。可参考https://blog.51cto.com/u_15349906/3715224 经查,cesium默认的tooltip是和
  • 遗留问题
    根据ncWMS图层获取数据时间,并结合cesium的clock
    提高globe本身边缘的抗锯齿程度(感觉好像并不支持)
    不要加载terrain。默认的cesium地球加载时会下载一个简单的地表模型供某些视角使用,approximateTerrainHeights.json。该文件是一个经纬度+海拔高度的json,下载该文件写在view的初始化里面,还没有找到关闭此功能的开关。