解决Cesium中Entity移动漂移的问题

51 篇文章 32 订阅
38 篇文章 6 订阅

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

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Cesium是一种开源的地理空间可视化引擎,它可以帮助开发者在浏览器上创建高性能的三维地球和地理信息系统。在Cesium,定点旋转可以通过设置实体的方向矢量来实现。 定点旋转是指以一个固定点为心,绕着这个点进行旋转。在Cesium,我们可以通过以下步骤来实现定点旋转: 1. 创建一个Entity对象,EntityCesium的基本元素,用于表示所有的地理空间实体。 2. 设置实体的position属性,即实体所在的位置,这个位置可以是一个地理坐标,例如经度、纬度和高度。 3. 设置实体的orientation属性,即实体在三维空间的姿态。姿态可以通过四元数、欧拉角、矩阵等方式来表示。在这里,我们可以使用Cesium的HeadingPitchRoll类型来表示实体的朝向,其Heading表示偏航角,Pitch表示俯仰角,Roll表示翻滚角。 4. 通过设置实体的orientation属性来实现定点旋转。可以通过调整Heading、Pitch和Roll的数值来改变实体的姿态,从而实现旋转效果。 在进行定点旋转时,我们可以根据需求调整旋转的速度、旋转的起始角度和终止角度等参数,以实现不同的动画效果。此外,Cesium还提供了许多其他功能,如光照、地形高度处理等,可以进一步增强定点旋转的可视效果。 总之,Cesium的定点旋转可以通过设置实体的姿态来实现,开发者可以根据需要调整旋转参数,以实现动态的地理空间可视化效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜郎king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值