# 前言

原理很简单,通过 Cesium 提供的 viewer.camera.zoomIn()viewer.camera.zoomOut API 即可。

# 解决办法

代码如下:

// 定义当前场景的画布元素的事件处理
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
// 设置鼠标滚动事件的处理函数,这里负责对相机高度进行控制
handler.setInputAction(function (e) {
    // 获取当前镜头位置的笛卡尔坐标
    let cameraPos = viewer.camera.position;
    // 获取当前坐标系标准
    let ellipsoid = viewer.scene.globe.ellipsoid;
    // 根据坐标系标准,将笛卡尔坐标转换为地理坐标
    let cartographic = ellipsoid.cartesianToCartographic(cameraPos);
    // 获取镜头的高度
    let height = cartographic.height;
    // 滚轮往前滚,镜头拉近
    if (e > 0) {
        // 镜头拉近
        viewer.camera.zoomIn(height / 3);
    } else {
        // 镜头远离
        viewer.camera.zoomOut(height * 1.2);
    }
}, Cesium.ScreenSpaceEventType.WHEEL)

进一步处理,如果想让相机镜头平滑的进行缩放,可以用 viewer.camera.flyTo() API。

代码如下:

// 根据上面当前镜头的位置,获取该中心位置的经纬度坐标
let centerLon = parseFloat(Cesium.Math.toDegrees(cartographic.longitude).toFixed(8));
let centerLat = parseFloat(Cesium.Math.toDegrees(cartographic.latitude).toFixed(8));
// 镜头拉近
viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(centerLon, centerLat, height / 1.8),
    duration: 1.0
});
// 镜头拉远
viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(centerLon, centerLat, height * 1.8),
    duration: 1.0
});
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

宇凌喵 微信支付

微信支付

宇凌喵 支付宝

支付宝