Cesium切换视角中心点不变

1. 倾斜

2. 回正

实现思路

在改变相机视角前,用相机高度和三角函数计算出一个偏移量,改变中心点的经纬度即可

javascript 复制代码
/**
     * 静态工具:根据俯仰角切换相机视角
     * @param {Cesium.Viewer} viewer Cesium Viewer
     * @param {number} lng   经度
     * @param {number} lat   纬度
     * @param {number} alt   高度(米)
     * @param {number} pitchDeg 俯仰角(角度制,-90 垂直向下)
     */
    static updateCameraByPerspective(viewer, lng, lat, alt, pitchDeg) {
        if (!viewer || typeof pitchDeg !== 'number') return;

        const pitch = Cesium.Math.toRadians(pitchDeg);
        let position = Cesium.Cartesian3.fromDegrees(lng, lat, alt);

        // 非 90° 俯视时修正位置
        const absPitch = Math.abs(pitchDeg);
        if (absPitch < 89) {
            const offset = alt / Math.tan(absPitch * Math.PI / 180);
            const heading = viewer.camera.heading;
            const offsetX = -offset * Math.sin(heading);
            const offsetY = -offset * Math.cos(heading);
            const enu = Cesium.Transforms.eastNorthUpToFixedFrame(position);
            const offsetVec = new Cesium.Cartesian3(offsetX, offsetY, 0);
            position = Cesium.Matrix4.multiplyByPoint(enu, offsetVec, new Cesium.Cartesian3());
        }

        viewer.camera.flyTo({
            destination: position,
            orientation: {
                heading: viewer.camera.heading,
                pitch,
                roll: 0
            }
        });
    }
相关推荐
用户83134859306983 天前
Cesium实现黄昏效果:按钮一键控制打开/关闭黄昏效果,滑块拖动实时控制黄昏浓烈度
vue.js·cesium
青山Coding3 天前
Cesium应用(八):物体运动的实现思路
前端·cesium
用户83134859306987 天前
Cesium实现雾气效果:按钮一键控制打开/关闭雾气效果,滑块拖动实时控制雾气浓度
vue.js·cesium
用户831348593069816 天前
Cesium实现实时联动鹰眼缩略图
vue.js·cesium
整点可乐19 天前
cesium实现全景图加载
javascript·cesium
用户831348593069821 天前
Vue3+Cesium实现3DTiles模型实时调节(离地面高度/xyz轴旋转/模型经纬度偏移)
vue.js·cesium
青山Coding24 天前
Cesium应用(七):地形开挖的实现思路
前端·cesium
毕安格 - BimAngle25 天前
地理配准高级教程:局部坐标(无地理信息)模型篇
3d·cesium·gltf·glb·3d tiles
duansamve25 天前
Python+CesiumLabv4.0.17生成上W个高度不一、颜色不一立方体的3D TILES文件
cesium
不争不抢的佛系少年1 个月前
Cesium模型没有动画怎么办?手把手教你通过代码给GLB模型添加动画!
cesium