案例场景:在Cesium开发三维场景展示中,肯定会碰到加载Entity的需求,如果在你的gis应用中,带了地形的展示。那么在旋转切换画面时,Entity是否跟着一起动了起来,感觉像漂移一样呢?来看下面两张图,两个点在山脚漂到了山顶:
图1 漂移到山脚
图2 漂移到山顶
出现上述情况的原因是因为,Entity未设置贴地,同时未开启地形检测。PS:地形检测的意义就在于开启后,会因为高度不一样,有些地物会不可见,即可解决上述的漂移的问题。
解决方案:
第一步:Cesium开启地形检测
viewer.scene.globe.depthTestAgainstTerrain = true; //默认为false
第二步:Entity中point开启贴地及设置高度
point:new Cesium.PointGraphics ( {
show : true,
pixelSize : params.pixelSize || 10,
heightReference:Cesium.HeightReference.CLAMP_TO_GROUND,
disableDepthTestDistance:99000000,
color : params.color || new Cesium.Color ( 255 , 255 , 0 , 1 ),
outlineColor : params.color || new Cesium.Color ( 0 , 0 , 0 , 0 ),
outlineWidth : params.outlineWidth || 0,
scaleByDistance : params.scaleByDistance || new Cesium.NearFarScalar ( 0 , 1 , 5e10 , 1 ),
translucencyByDistance : params.translucencyByDistance || new Cesium.NearFarScalar ( 0 , 1 , 5e10 , 1 ),
distanceDisplayCondition : params.translucencyByDistance || new Cesium.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:new Cesium.Cartesian2(10,0), //偏移
disableDepthTestDistance:99000000,
heightReference:Cesium.HeightReference.CLAMP_TO_GROUND
}
注意点:disableDepthTestDistance 这个参数根据当地地形可尽量设置高一点,以免高度不够造成不可见。
最后来看修正后的结果
图3 正常未遮挡可见
图4 点被山体遮挡不可见
图5 点和标签都被山体遮挡