案例场景:在Cesium开发三维场景展示中,肯定会碰到加载Entity的需求,如果在你的gis应用中,带了地形的展示。那么在旋转切换画面时,Entity是否跟着一起动了起来,感觉像漂移一样呢?来看下面两张图,两个点在山脚漂到了山顶:
图1 漂移到山脚
图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 这个参数根据当地地形可尽量设置高一点,以免高度不够造成不可见。
最后来看修正后的结果
图3 正常未遮挡可见
图4 点被山体遮挡不可见
图5 点和标签都被山体遮挡
通过本文可以学习在cesium中如何解决entity漂移的问题。