Cesium的pickEllipsoid和pickPosition的区别

最近实现Cesium手动绘制图形的功能,需要鼠标点击及移动时获取当前的空间坐标。实现的过程中发现了下面两种获取空间坐标的方式:

在Cesium Sandcastle给出的绘制示例中,采用了pickPosition的方式获取空间坐标,并给出如下注释:

Csium绘制示例


大致可理解为viewer.camera.pickEllipsoid 在加载地形的场景上获取的坐标有误差,用viewer.camera.pickEllipsoid来解决这一问题。于是我用viewer.camera.pickEllipsoid 做了下测试,发现确实有较大误差:

pickEllipsoid在地形起伏表面绘制.gif


于是采用了Cesium Sandcastle中推荐的viewer.scene.pickPosition进行位置获取,却发现误差更大了

pickPosition.gif


查阅资料后得知:viewer.scene.pickPosition需要开启“地形深度检测”来解决在没有3dTile模型下的笛卡尔座标不准问题:

 

 

//解决viewer.scene.pickPosition(e.position)在没有3dTile模型下的笛卡尔座标不准问题。
viewer.scene.globe.depthTestAgainstTerrain = true;

也就是说,viewer.scene.pickPosition 在未开启“地形深度检测”的情况下只能在3DTile上准确获取空间坐标(如下图)。

未开启地形深度检测,pickPosition在3DTile上绘制.gif


开启“地形深度检测”后,viewer.scene.pickPosition 也能在非3DTile上准确获取坐标(如下图)。

开启地形深度检测的pickPosition.gif


总结如下

 

  • pickEllipsoid在加载地形的情况下有一定误差,地形凹凸程度越大,误差越大。
  • pickPosition在depthTestAgainstTerrain=false时只能在3DTile上获取准确位置,当depthTestAgainstTerrain=true时,在3DTile和底图上均能获取准确位置

新发现问题

当开启了地形深度检测后,绘制点时会被遮挡。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值