出现这问题我遇到的一般有两种原因
- 因为地形深度原因导致的不准
参考博客:Cesium的拾取问题总结
解决办法:viewer.scene.globe.depthTestAgainstTerrain = true; //默认为false
- 页面使用了缩放的方式解决自适应问题
如:scale translate等
之前网站的时候自适应用了translate缩放,没有用rem导致cesium点击的时候,根据屏幕坐标获取的经纬度不准,拿不到点信息,后来把屏幕坐标打印出来就发现原因,虽然页面是缩放了,但是屏幕坐标还是页面原本的信息,所以对应不上,要把获取到的屏幕坐标根据缩放比例进行换算,再去获取经纬度
例子如下:
viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(){
let x = _this.$store.state.scale_x; // x轴的缩放比例
let y = _this.$store.state.scale_y; // y轴的缩放比例
let position = {
x: movement.position.x / x,
y: movement.position.y / y,
}; // 转化后的屏幕坐标
var pickRay = viewer.camera.getPickRay(position);
.......
})