- import * as Cesium from "cesium";
-
- /**
- * 相机移动到某一个坐标或者矩形范围内
- * @param {Cesium.Viewer} viewer -地图对象
- * @param {Object} option -参数对象
- * @param {Number} option.duration -视图跳转时间(单位/s)
- * @param {String} option.type -跳转目标类型方式,‘point’:相机移动到某一个坐标;‘rectangle’:相机移动到矩形范围内
- * @param {Array} option.xyz -跳转目标类型方式:‘point’,则xyz为[x,y,z]
- * @param {Array} option.wsen -跳转目标类型方式:‘rectangle’,则wsen为[west , south , east , north],(单位/度)
- * @param {Number} option.heading -相机航向角
- * @param {Number} option.pitch -相机俯仰角
- * @param {Number} option.roll -相机翻滚角
- */
- export function cameraFlyTo(viewer, option) {
- let destination;
- if ((option.type = "point")) {
- destination = Cesium.Cartesian3.fromDegrees(...option.xyz);
- } else if ((option.type = "rectangle")) {
- destination = Cesium.Cartesian3.fromDegrees(...option.ewsn);
- }
- viewer.camera.flyTo({
- duration: option.duration,
- destination,
- orientation: {
- heading: Cesium.Math.toRadians(option.heading),
- pitch: Cesium.Math.toRadians(option.pitch),
- roll: option.roll,
- },
- });
- }
-
- /**
- * 相机移动到某一坐标点上,可以用于视角跟踪实体对象,但是视角是固定的,
- * 适合视角跟随的情况:实时运动轨迹,可以获取前后两个点,实时计算偏北角(航向角)
- * @param {Cesium.Viewer} viewer -地图对象
- * @param {Object} option -参数对象
- * @param {Array} option.xyz -跳转椭球体中心坐标数组[x,y,z]
- * @param {Number} option.heading -相机航向角
- * @param {Number} option.pitch -相机俯仰角
- * @param {Number} option.range -以椭球体中心坐标为中心的的范围大小(单位/m)
- */
- export function cameraLookAt(viewer, option) {
- viewer.camera.lookAt(
- Cesium.Cartesian3.fromDegrees(...option.xyz),
- new Cesium.HeadingPitchRange(
- Cesium.Math.toRadians(option.heading),
- Cesium.Math.toRadians(option.pitch),
- option.range
- )
- );
- }
-
- /**
- * 相机移动到某一坐标点上,不可用于视角跟踪实体对象
- * @param {Cesium.Viewer} viewer -地图对象
- * @param {Object} option -参数对象
- * @param {Array} option.xyz -跳转椭球体中心坐标数组[x,y,z]
- * @param {Number} option.duration -视图跳转时间(单位/s)
- * @param {Number} option.heading -相机航向角
- * @param {Number} option.pitch -相机俯仰角
- * @param {Number} option.roll -相机翻滚角
- */
- export function cameraSetView(viewer, option) {
- viewer.camera.setView({
- destination: Cesium.Cartesian3.fromDegrees(...option.xyz),
- orientation: {
- heading: Cesium.Math.toRadians(option.heading),
- pitch: Cesium.Math.toRadians(option.pitch),
- roll: option.roll,
- },
- });
- }
-
- /**
- * 相机视图移动到移到某一个坐标范围内,注意可以用来定位用,不可用于视角跟踪实体对象!!!!
- * @param {Cesium.Viewer} viewer -地图对象
- * @param {Object} option -参数对象
- * @param {Array} option.xyz -跳转椭球体中心坐标数组[x,y,z]
- * @param {Number} option.radius -跳转椭球体半径(单位/m)
- * @param {Number} option.duration -视图跳转时间(单位/s)
- * @param {Number} option.heading -相机航向角
- * @param {Number} option.pitch -相机俯仰角
- * @param {Number} option.range -以跳转坐标为中心的的范围大小(单位/m)
- */
- export function cameraflyToBoundingSphere(viewer, option) {
- viewer.camera.flyToBoundingSphere(
- new Cesium.BoundingSphere(
- Cesium.Cartesian3.fromDegrees(...option.xyz),
- option.radius
- ),
- {
- duration: option.duration,
- offset: {
- heading: Cesium.Math.toRadians(option.heading),
- pitch: Cesium.Math.toRadians(option.pitch),
- range: option.range,
- },
- complete: function () {
- console.log("飞行完成!");
- },
- cancel: function () {
- console.log("飞行取消!");
- },
- }
- );
- }
-
- /**
- * 相机移动到某一entity实体上 === viewer.zoomTo(entity),不可用于视角跟踪实体对象
- * @param {Cesium.Viewer} viewer -地图对象
- * @param {Object} option -参数对象
- * @param {Object} option.target -target可以是单个或者多个entity对象,以及各自cesium支持的图层,不能是坐标
- * @param {Number} option.duration -视图跳转时间(单位/s)
- * @param {Number} option.heading -相机航向角
- * @param {Number} option.pitch -相机俯仰角
- * @param {Number} option.range -以entity为中心的的范围大小(单位/m)
- */
- export function viewerFlyTo(viewer, option) {
- viewer.flyTo(option.target, {
- duration: option.duration,
- offset: {
- heading: Cesium.Math.toRadians(option.heading),
- pitch: Cesium.Math.toRadians(option.pitch),
- range: option.range,
- },
- // 视角跳转最大高度(一般不用)
- // maximumHeight: 20000,
- });
- }