干货!解决Cesium中Entity移动漂移的问题

简介: 案例场景:在Cesium开发三维场景展示中,肯定会碰到加载Entity的需求,如果在你的gis应用中,带了地形的展示。那么在旋转切换画面时,Entity是否跟着一起动了起来,感觉像漂移一样呢?

案例场景:在Cesium开发三维场景展示中,肯定会碰到加载Entity的需求,如果在你的gis应用中,带了地形的展示。那么在旋转切换画面时,Entity是否跟着一起动了起来,感觉像漂移一样呢?来看下面两张图,两个点在山脚漂到了山顶:

image.png

图1 漂移到山脚

image.png

图2 漂移到山顶

出现上述情况的原因是因为,Entity未设置贴地,同时未开启地形检测。PS:地形检测的意义就在于开启后,会因为高度不一样,有些地物会不可见,即可解决上述的漂移的问题。

解决方案:

第一步:Cesium开启地形检测

viewer.scene.globe.depthTestAgainstTerrain=true; //默认为false

第二步:Entity中point开启贴地及设置高度

point:newCesium.PointGraphics ( {
show : true,
pixelSize : params.pixelSize||10,
heightReference:Cesium.HeightReference.CLAMP_TO_GROUND,
disableDepthTestDistance:99000000,
color : params.color||newCesium.Color ( 255 , 255 , 0 , 1 ),
outlineColor : params.color||newCesium.Color ( 0 , 0 , 0 , 0 ),
outlineWidth : params.outlineWidth||0,
scaleByDistance : params.scaleByDistance||newCesium.NearFarScalar ( 0 , 1 , 5e10 , 1 ),
translucencyByDistance : params.translucencyByDistance||newCesium.NearFarScalar ( 0 , 1 , 5e10 , 1 ),
distanceDisplayCondition : params.translucencyByDistance||newCesium.DistanceDisplayCondition(0, 4.8e10),
        })

关键代码:

heightReference:Cesium.HeightReference.CLAMP_TO_GROUND,
disableDepthTestDistance:99000000,

第三步:Entity中lable同样开启贴地及设置高度

代码如下:

label : {
text : params.name,
font : '10pt Source Han Sans CN',    //字体样式fillColor:Cesium.Color.BLACK,        //字体颜色backgroundColor:Cesium.Color.AQUA,    //背景颜色showBackground:true,                //是否显示背景颜色style: Cesium.LabelStyle.FILL,        //label样式outlineWidth : 2,                    
verticalOrigin : Cesium.VerticalOrigin.CENTER,//垂直位置horizontalOrigin :Cesium.HorizontalOrigin.LEFT,//水平位置pixelOffset:newCesium.Cartesian2(10,0),           //偏移disableDepthTestDistance:99000000,
heightReference:Cesium.HeightReference.CLAMP_TO_GROUND        }

注意点:disableDepthTestDistance 这个参数根据当地地形可尽量设置高一点,以免高度不够造成不可见。

最后来看修正后的结果

image.png

 图3 正常未遮挡可见

image.png

图4 点被山体遮挡不可见

image.png

图5 点和标签都被山体遮挡

通过本文可以学习在cesium中如何解决entity漂移的问题。


目录
相关文章
cesium添加实体不被地形遮挡的参数设置
disableDepthTestDistance:指定从相机到禁用深度测试的距离,关于深度测试我们将在后面的文章中介绍到,由于深度测试的存在,我们的对象很多时候会被地形挡住,如下:
3428 0
cesium添加实体不被地形遮挡的参数设置
Cesium开发:模型实体高亮
Cesium开发:模型实体高亮
1460 0
|
定位技术 API 网络架构
地图图层接入:从mapbox转向cesium
由于地图坐标系的不统一,地图图商提供的图层服务也各有特色,在图层对接的开发过程中常会遇到许多坑,从二维图层到三维图层,地图引擎mapbox再到cesium,本文将分享笔者在近期地图图层接入过程中总结的一些经验。
5587 10
Cesium中开启等高线渲染
最近接到一个需求,需要在Cesium中基于实时地形开启等高线效果,让用户可以看到真实效果。
1453 0
Cesium中开启等高线渲染
|
定位技术
最完整的经纬度正则表达式
最完整的就是最好的 ----经纬度
16247 0
|
atlas
Cesium导入geojson数据
这篇文章详细描述了如何在Cesium中导入GeoJSON数据来绘制地理矢量数据,并提供了实现的具体方法和示例代码。
1238 2
Cesium导入geojson数据
Cesium添加3DTile
这篇文章介绍了如何在Cesium中添加3DTile内容,以增强三维地理空间数据的表现,并提供了实现的具体步骤和代码示例。
879 1
Cesium添加3DTile
|
JSON 数据格式
Cesium实现贴地线
这篇文章介绍了在Cesium中实现地面贴合线的效果及其相关技术要点。
649 5
Cesium实现贴地线
cesium自带的组件显示与隐藏
这篇文章讲解了如何控制Cesium中自带组件的显示与隐藏,包括了各个组件的属性名称及其对应的显示隐藏操作方法。
773 1
cesium自带的组件显示与隐藏
Cesium自动生成建筑物3D轮廓模型
这篇文章讲解了如何使用Cesium根据地形和建筑物的高度数据自动生成3D轮廓模型的方法。
1198 2