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
            }
        });
    }
相关推荐
GIS开发特训营7 天前
Cesium Shader 实战:三维 GIS 可视化进阶教程
gis·cesium·gis开发·webgis
GDAL12 天前
viewer.camera.flyTo 全面教程
cesium·camera·flyto
GIS学姐嘉欣13 天前
Cesium进阶教程(2)线性高度雾
javascript·cesium·gis开发·webgis
GISBox14 天前
一站式体验GISBox 2.1.3:矢量样式扩展与3DTiles位置优化
gis·cesium·倾斜摄影·ifc·osgb·gisbox·切片转换
那年那棵树14 天前
【WebGis】基于WebGis的系统设计与开发
gis·openlayers·cesium·地理信息系统
duansamve14 天前
Cesium中设置背景图片(不是天空盒)
cesium
地狱为王20 天前
Cesium for Unity叠加行政区划线
unity·gis·cesium
GIS瞧葩菜23 天前
entity几何体旋转圈编辑(绕 Z 轴旋转)完整流程拆解
cesium
ct97825 天前
Cesium高级特效与着色器开发全指南
前端·gis·cesium·着色器