JAVA语言之Cesium 1.50重量级新功能测评
小标 2019-06-19 来源 : 阅读 2043 评论 0

摘要:本文主要向大家介绍了JAVA语言之Cesium 1.50重量级新功能测评,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之Cesium 1.50重量级新功能测评,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

JAVA语言之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版以前的效果大概是这个样子:

关键代码:

另外,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的层面提供,算是封装得比较好了。

3dtiles数据上的高度获取(Clamp to 3D Tiles)

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];
}
}


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 2 不喜欢 | 0
看完这篇文章有何感觉?已经有2人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程