赞
踩
案例场景:在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 点和标签都被山体遮挡
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。