干货!解决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系列:加载单个模型
Cesium如何加载单个三维模型数据
535 0
cesium添加实体不被地形遮挡的参数设置
disableDepthTestDistance:指定从相机到禁用深度测试的距离,关于深度测试我们将在后面的文章中介绍到,由于深度测试的存在,我们的对象很多时候会被地形挡住,如下:
2001 0
cesium添加实体不被地形遮挡的参数设置
|
2月前
|
开发框架 前端开发 定位技术
在Mars3d实现cesium的ImageryLayer自定义瓦片的层级与原点
通过上述步骤,您可以成功在Mars3D平台上集成Cesium,并实现自定义瓦片图层的层级与原点配置。这一过程不仅提升了地图应用的定制化程度,也为处理特定数据集和优化用户体验提供了灵活的解决方案。在实际开发过程中,不断测试和微调是确保图层展示效果与性能的关键。
114 0
|
4月前
|
JavaScript 前端开发 数据格式
Cesium案例解析(四)——3DModels模型加载
Cesium案例解析(四)——3DModels模型加载
281 0
|
4月前
|
数据可视化 JavaScript 前端开发
Cesium案例解析(五)——3DTilesPhotogrammetry摄影测量3DTiles数据
Cesium案例解析(五)——3DTilesPhotogrammetry摄影测量3DTiles数据
143 0
|
7月前
Google Earth Engine APP(GEE)—— 一个简单的加载影像的UI(RGB,NDWI和NDVI)这里使用时间滑块进行时间选择
Google Earth Engine APP(GEE)—— 一个简单的加载影像的UI(RGB,NDWI和NDVI)这里使用时间滑块进行时间选择
106 0
259Echarts - 3D 路径图(Airline on Globe)
259Echarts - 3D 路径图(Airline on Globe)
49 0
108Echarts - 雷达图(Basic Radar Chart)
108Echarts - 雷达图(Basic Radar Chart)
47 0
|
存储 JSON 数据可视化
3.Cesium中实体Entity创建(超详细)
本文中,我将介绍 Cesium 中创建实体的方法,并对其进行分类,帮助读者快速理解 Cesium 中实体的类别,创建代码以及具体效果;
1156 0
|
JSON 定位技术 API
Cesium开发:单个对象Entity
Cesium开发:单个对象Entity
212 0