1、绑定点击事件;
2、保存点数据;
3、绘制添加到集合;
const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
handler.setInputAction(function (event) {
const ray = viewer.camera.getPickRay(event.position);
const earthPosition = viewer.scene.globe.pick(ray, viewer.scene);
if (Cesium.defined(earthPosition)) {
activeShapePoints.push(earthPosition);
createPoint(earthPosition);
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
上面代码坐标是第一步骤中关键代码,用于获取坐标,获取采用 camera.getPickRay() + globe.pick()方式;
除此之外还可以使用如下两种:
1、camera.pickEllipsoid(windowPosition, ellipsoid)
2、scene.pickPosition(windowPosition)
这两种方式直接使用时在加载地形的场景上获取的坐标都有误差,
这个时候可以开启地形深度检测
//解决viewer.scene.pickPosition(e.position)在没有3dTile模型下的笛卡尔座标不准问题。
viewer.scene.globe.depthTestAgainstTerrain = true;
开启之后pickPosition就可以愉快的玩耍了,但是pickEllipsoid还是不行;