CameraUtil 相机控制工具
演练场
导入
ts
import { CameraUtil } from "@m-tech/gis-core";方法
setViewerMode(mode)
切换二/三维。
入参
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| mode | '2D' | '3D' | '3D' | 模式 |
flyTo(target, options)
飞向。
入参
| 参数名称 | 类型 | 描述 |
|---|---|---|
| target | Cesium.Entity | Overlay | Position | 要查看的实体、实体数组、实体集合、数据源、Cesium3DTileset、点云、图像层或具体的经纬度。 |
| options | object | 飞行相关参数设置 |
| options.duration | number | 以秒为单位的飞行持续时间。 如果省略,会根据飞行的距离来计算一个理想的持续时间。 |
| options.maximumHeight | number | 飞行动画中的最高高度设置 |
| options.offset | Cesium.HeadingPitchRange | 航向间距范围 |
| options.offset.heading | number | 航向角(以弧度为单位) |
| options.offset.pitch | number | 俯仰角(以弧度为单位) |
| options.offset.range | number | 距中心的距离,以米为单位 |
| options.offset.distance | number | string | 中心点偏移距离,以米为单位,如果传入字符串且以 px 结尾则以像素为单位 |
| options.offset.direction | number | 中心点偏移方向(以弧度为单位) |
返回
| 类型 | 描述 |
|---|---|
Promise.<boolean> | 如果成功完成了飞行,则为 true; 如果当前未在场景中看到目标,或者取消了飞行,则为 false。 |
示例用法
ts
// 飞向-Entity
const layer = new EntityLayer().addToViewer(viewer);
const wall = new Wall([
new Position(114.33186342928641, 30.484746302321202, 0),
new Position(114.33341220217702, 30.484746302321202, 0),
new Position(114.33341220217702, 30.488085655535254, 0),
new Position(114.33186342928641, 30.488085655535254, 0),
new Position(114.33186342928641, 30.484746302321202, 0),
]).addToLayer(layer);
CameraUtil.flyTo(wall);
// 飞向-Entity(带中心点偏移)
CameraUtil.flyTo(wall, {
offset: {
range: 650,
distance: "100px",
direction: CesiumMath.toRadians(-90), // 中心点偏左(目标点会在偏右侧)
},
});
// 飞向-Position
CameraUtil.flyTo(new Position(114.315782, 30.47449, 0), {
duration: 10,
maximumHeight: 1000,
offset: {
heading: CesiumMath.toRadians(45),
pitch: CesiumMath.toRadians(-30),
range: 1000,
},
});
// 飞向-Position(带中心点偏移)
CameraUtil.flyTo(new Position(114.315782, 30.47449, 0), {
duration: 10,
maximumHeight: 1000,
offset: {
range: 650,
distance: "100px",
direction: CesiumMath.toRadians(-90), // 中心点偏左(目标点会在偏右侧)
},
});zoomTo(target, offset)
缩放至。
入参
| 参数名称 | 类型 | 描述 |
|---|---|---|
| target | Cesium.Entity | Overlay | Position | 要查看的实体、实体数组、实体集合、数据源、Cesium3DTileset、点云、图像层或具体的经纬度。 |
| offset | Cesium.HeadingPitchRange | 航向间距范围 |
| offset.heading | number | 航向角(以弧度为单位) |
| offset.pitch | number | 俯仰角(以弧度为单位) |
| offset.range | number | 距中心的距离,以米为单位 |
返回
| 类型 | 描述 |
|---|---|
Promise.<boolean> | 如果成功完成了飞行,则为 true; 如果当前未在场景中看到目标,或者取消了飞行,则为 false。 |
示例用法
ts
// 缩放-Entity
CameraUtil.zoomTo(wall);
// 缩放-Position
CameraUtil.zoomTo(new Position(114.315782, 30.47449, 0), {
heading: CesiumMath.toRadians(45),
pitch: CesiumMath.toRadians(-30),
range: 1000,
});setViewport(target, isFlyTo, params)
设置视角。
入参
| 参数名称 | 类型 | 描述 |
|---|---|---|
| target | Position | 设置相机至具体的经纬度及航向、俯仰和滚动 |
| isFlyTo | Boolean | 是否有飞行动画 |
| params | Object |
示例用法
ts
CameraUtil.setViewport(new Position(114.315782, 30.47449, 0, 45, -30, 0), true);getCameraPosition()
获取当前视图相机位置
返回
| 类型 | 描述 |
|---|---|
Position | 相机位置 |
示例用法
ts
const position = CameraUtil.getCameraPosition();
console.log(position);
// {
// longitude: 114.315782,
// latitude: 30.47449,
// height: 0,
// heading: 45,
// pitch: -30,
// roll: 0,
// }