Cesium中Camera的常用方法

发布时间 2023-04-20 09:58:18作者: 中亿丰数字科技

08-Cesium中Camera的常用方法

camera是viewer.scene中的属性,用来控制当前的可见域。viewer.camera 是快捷写法,访问的是 viewer.scene.camera,所以调用时这两种写法都行。介绍三种常用的view.carmera方法。

(1)setView

Camera根据视图位置直接定位。

const position = Cesium.Cartesian3.fromDegrees(118.923, 32.482, 1785000) //可以根据需求选择坐标与坐标类型
viewer.camera.setView({
    destination: position,                  // 相机位置
    orientation: {
        heading: Cesium.Math.toRadians(0), // 水平旋转  -正北方向
        pitch: Cesium.Math.toRadians(-90), // 上下旋转  --俯视朝向
        roll: 0                                                   // 视口翻滚角度
        }
})

主要参数:
heading: 偏航角,默认方向为正北(0°),正角度为向东旋转,即左右摇头。
pitch: 俯仰角,默认角度为-90°,即朝向地面,0°为平视,正角度为仰视,负角度为俯视,即抬头低头。
roll: 翻转角,默认角度为0°,正角度向右旋转,负角度向左旋转,即左右歪头。

(2)flyHome

默认位置 Cesium.Camera.DEFAULT_VIEW_RECTANGLE(默认视角矩形框),视角由一个矩形组成。

Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(119.9, 30.7501282784158, 121.33, 31.9645982738191);
// 将相机飞到主视图,即默认矩形框区域。
let duration = 2;
viewer.camera.flyHome(duration)

在 Cesium.Rectangle.fromDegrees()中,传入的四个参数分别为最西边坐标点的经度,最南边左边点的纬度,最东边坐标点的经度,最南边坐标点的维度,是矩形框四个坐标点的集合。
duration表示飞行的持续时间,可以不传。默认值为Cesium根据需要行驶的距离来计算飞行持续时间。

(3)flyTo

将相机从当前位置飞行移动到新位置。

// 1. 飞到自上而下视图的位置(垂直视角)
viewer.camera.flyTo({
    destination : Cesium.Cartesian3.fromDegrees(118.923, 32.482, 15000.0)
});

// 2. 飞到自上而下视图的矩形(垂直视角)
viewer.camera.flyTo({
    destination : Cesium.Rectangle.fromDegrees(119.9, 30.7501282784158, 121.33, 31.9645982738191)
});

// 3.使用航向、俯仰和滚转飞到一个方位.
viewer.camera.flyTo({
    destination : Cesium.Cartesian3.fromDegrees(118.923, 32.482, 5000.0),
    orientation : {
        heading : Cesium.Math.toRadians(175.0),
        pitch : Cesium.Math.toRadians(-35.0),
        roll : 0.0
    }
});

(4)lookAt

场景视角锁定,拖动视图主要以小球视角进行环绕查看。使用目标和偏移量设置相机位置和方向。

const center =  Cesium.Cartesian3.fromDegrees(118.923, 32.482,)  // 目标位置
const heading =   Cesium.Math.toRadians(50)// 水平旋转  -正北方向
const pitch =  Cesium.Math.toRadians(-90) // 上下旋转  --俯视朝向
const range = 2000 // 目标点高度
viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading, pitch, range))