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

案例场景:在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 点和标签都被山体遮挡

Guess you like

Origin blog.csdn.net/yelangkingwuzuhu/article/details/115837034