一、问题:切换到2D模式时无法在地图上绘制了
handler = new Cesium.ScreenSpaceEventHandler(view.scene.canvas)
handler.setInputAction(function(movement) {
let position = viewer.scene.pickPosition(movement.position) // 注意这里
......
},Cesium.ScreenSpaceEventType.LEFT_CLICK)
viewer.scene.pickPosition 无法获取2D模式下的笛卡尔坐标
(额外小知识:viewer.scene.pickPosition需要开启“地形深度检测”来解决在没有3dTile模型下的笛卡尔座标不准问题)
二、解决:
handler = new Cesium.ScreenSpaceEventHandler(view.scene.canvas)
handler.setInputAction(function(movement) {
let ray = viewer.camera.getPickRay(movement.position) // camera发射线与地形的求交
let earthPosition = viewer.scene.globe.pick(ray, viewer.scene) // 获取当前点击坐标
......
},Cesium.ScreenSpaceEventType.LEFT_CLICK)
viewer.camera.getPickRay
此方法无论是否存在地形,无论是否开启地形深度检测,获取与地形的笛卡尔坐标都是准确的