Cesium 1.50重量级新功能测评
概要
既Cesium 1.49中3dtile加载性能大幅提升以后,Cesium 1.50再次迎来几个重量级新功能:
1 地球裁切,这下相当于可以截取一部分地形影像数据,当作一个平面场景来用了!
2 射线求交,为客户提供了进行通视分析和碰撞检测的可能!
3 贴地高度获取,为标签等位置的放置提供了依据。
4 地面大气效果,地球效果更加好看,算是弥补了长久以来的短板吧。。
Cesium 1.50又新增加了如下几个示例,以下分析也是根据这几个示例来的。

地面大气效果(Ground Atmosphere)
Cesium 1.50版新增了这个属性:globe.showGroundAtmosphere,默认为true,也就是默认开启了地面大气效果。地面大气效果如下:

而1.50版以前的效果大概是这个样子:

关键代码:
globe.showGroundAtmosphere = checked;
globe.lightingFadeOutDistance = defaultLightFadeOut;
globe.lightingFadeInDistance = defaultLightFadeIn;
globe.nightFadeOutDistance = defaultNightFadeOut;
globe.nightFadeInDistance = defaultNightFadeIn;
另外,Cesium老早之前就有一个scene.skyAtmosphere,用来控制大气效果了。不过这个只能控制相机在近地面时抬头看天的效果。Cesium中还有一个叫 Atmosphere Color 的示例,就是演示scene.skyAtmosphere的用法。
地球裁切(Cartographic Limit Rectangle)
这个示例可以用来裁切地球,效果如下图所示:

这是一个激动人心的效果!老早之前就有客户一直抱怨不想要地球,只想看平面,但是平面又涉及到拉伸变形的问题。这回有了它,就可以在地球上任意截取一块地形和影像。裁切的区域越小,就会越近似平面。
关键代码如下:
var coffeeBeltRectangle = Cesium.Rectangle.fromDegrees(-180.0, -23.43687, 180.0, 23.43687);
viewer.scene.globe.cartographicLimitRectangle = coffeeBeltRectangle;
我尝试着截取了一块中国区域,效果还不错。

模型上的高度获取(Clamp to 3D Model)
给定地理坐标,获取当前地理位置的物体高度。老早之前Cesium就提供了地形高程获取的相关函数,如ApproximateTerrainHeights、sampleTerrain、sampleTerrainMostDetailed,只是一直比较原始。这一次在Scene的层面提供,算是封装得比较好了。

var objectsToExclude = [point];
var cartographic = new Cesium.Cartographic();
var height = scene.sampleHeight(cartographic, objectsToExclude);
3dtiles数据上的高度获取(Clamp to 3D Tiles)

var position = positionProperty.getValue(clock.currentTime);
entity.position = scene.clampToHeight(position, objectsToExclude);
Cesium最新提供的两个方法sampleHeight和clampToHeight,按照官方文档的说法,都可以作用于globe, 3D Tiles, or primitives,都是用来给定地理坐标,然后获取对应的高度值。我这里只看到了参数类型略有不同,返回值一个是直接给高度,另外一个是返回一个position。貌似大同小异。。以下附带两个函数的说明如下:


射线求交(development/Pick From Ray)
Cesium提供了另外一个激动人心的功能,终于可以求交运算了。以前看超图的示例,有通视分析的功能,还想研究一下。没想到Cesium自己也提供了。
这项功能,不仅可以用来做通视分析,或许也可以用来做广大客户日思夜想的碰撞检测了!


关键代码如下:
var start = Cesium.Cartographic.toCartesian(blueCartographic);
var end = Cesium.Cartographic.toCartesian(redCartographic);
var direction = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(end, start, new Cesium.Cartesian3()), new Cesium.Cartesian3());
var ray = new Cesium.Ray(start, direction);
var results = [];
if (drillPick) {
results = scene.drillPickFromRay(ray, 10, objectsToExclude);
} else {
var result = scene.pickFromRay(ray, objectsToExclude);
if (Cesium.defined(result)) {
results = [result];
}
}
后记
Cesium 1.50版也带来一些额外的问题,加载老版本的3dtiles或者gltf数据时,可能会报错:

这个问题我在另外一篇文章中给予说明和解决方案。
欢迎关注 Cesium实验室 ,QQ群号:595512567。

Cesium 1.50重量级新功能测评的更多相关文章
- React Native 0.50版本新功能简介
React Native在2017年经历了众多版本的迭代,从接触的0.29版本开始,到前不久发布的0.52版本,React Native作为目前最受欢迎的移动跨平台方案.虽然,目前存在着很多的功能和性 ...
- Cesium 1.51新功能评测
前言 之前介绍Cesium1.50版本的新功能时,很多人把1.50写成1.5.这两个版本可不一样,之间差了45个小版本号,1.5版本大概是Cesium三年前的版本了. Cesium每月月初的第一个工作 ...
- MySQL 5.7 Replication 相关新功能说明
背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关, ...
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- 初识 MySQL 5.6 新功能、参数
摘要: 继上一篇的文章 初识 MySQL 5.5 新功能.参数 之后,现在MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不 ...
- Visual Studio 2013 新功能 Memory Dump 分析器
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. TechEd2013 发现新功能 12月5日和6日,在国家会议中心参加了微软的 TechEd2013 ...
- Unity5 新功能解析--物理渲染与standard shader
Unity5 新功能解析--物理渲染与standard shader http://blog.csdn.net/leonwei/article/details/48395061 物理渲染是UNITY5 ...
- Red Hat Enterprise Linux 7的新功能
简介红帽最新版本的旗舰平台交付显著增强的可用性. 性能和可靠性. 丰富的新功能为架构. 系统管理员和开发人员提供所需的资源以更高效地进行创新和管理.架构师: 红帽® 企业 Linux® 7 适合 ...
- 重大新闻:借贷宝不用绑卡了,借贷宝APP推出肖像识别新功能!
动动手指,20元人民币立即到手:http://www.cnblogs.com/mfryf/p/4754384.html 滴滴打车烧钱十几个亿,狂送打车券,很多人天天免费坐车! 去年年初百度钱包注册奖励 ...
随机推荐
- day3-编码、文件、集合、函数、递归
学习内容: 1. 文件编码 2. 文件 3. 集合 4.函数 5.递归 6.匿名函数 1. 文件编码: 常见的字符串编码有:ASCII 扩展的ASCII Unicode GBK GB2312 GB18 ...
- 位运算 - 左移右移运算符 >>, <<, >>>
1-左移运算符m<<n,表示把m左移n位.左移n位的时候,最左边的n位数将被丢弃,同时在最右边补上n个0.例如: 00001010<<2 = 00101000 10001010 ...
- 基于 RocketMQ 的同城双活架构在美菜网的挑战与实践
本文整理自李样兵在北京站 RocketMQ meetup分享美菜网使用 RocketMQ 过程中的一些心得和经验,偏重于实践. 嘉宾李样兵,现就职于美菜网基础服务平台组,负责 MQ ,配置中心和任务调 ...
- python dict 实现swich
使用dict实现swich,通过不同的键映射不同的函数. swich = { 'hour1':pred.getper1htable, 'hour6':pred.getper6htable, 'hour ...
- PAT甲级——A1075 PAT Judge
The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...
- 编写函数处理user_list,新方法
写函数,完成以下功能: # 例如有: user_list=[ {"name": "alex","hobby":"抽烟"} ...
- <随便写>创建文件批处理文件
创建一个text文档 写入想写的程序 将后缀改为bat 例如创建一个文件夹: 双击运行bat文件就可以创建文件夹 运行结果: 需要批量处理,就用for循环生成代码,粘贴上去就行了
- CAS添加验证码功能
1. cas.war 下面的web-inf/web.xml lib添加 kaptcha.jar kaptcha.jar通过maven获取 <dependency> <group ...
- Ubuntu安装CUDA9.2(不更新驱动)
1.先装驱动,以为安装CUDA时安装最新驱动导致CUDA用不了 sudo apt-get install nvidia-396 2.参考这,安装好CUDA 9.2 https://developer. ...
- .Net Email操作类
using System; using System.Text; using System.Net.Mail; using System.Net; using System.Linq; using S ...