import * as Cesium from "cesium";
/**
* 相机移动到某一个坐标或者矩形范围内
* @param {} viewer -地图对象
* @param {Object} option -参数对象
* @param {Number} -视图跳转时间(单位/s)
* @param {String} -跳转目标类型方式,‘point’:相机移动到某一个坐标;‘rectangle’:相机移动到矩形范围内
* @param {Array} -跳转目标类型方式:‘point’,则xyz为[x,y,z]
* @param {Array} -跳转目标类型方式:‘rectangle’,则wsen为[west , south , east , north],(单位/度)
* @param {Number} -相机航向角
* @param {Number} -相机俯仰角
* @param {Number} -相机翻滚角
*/
export function cameraFlyTo(viewer, option) {
let destination;
if ((option.type == "point")) {
destination = Cesium.Cartesian3.fromDegrees(...option.xyz);
} else if ((option.type == "rectangle")) {
destination = Cesium.Rectangle.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 {} viewer -地图对象
* @param {Object} option -参数对象
* @param {Array} -跳转椭球体中心坐标数组[x,y,z]
* @param {Number} -相机航向角
* @param {Number} -相机俯仰角
* @param {Number} -以椭球体中心坐标为中心的的范围大小(单位/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 {} viewer -地图对象
* @param {Object} option -参数对象
* @param {Array} -跳转椭球体中心坐标数组[x,y,z]
* @param {Number} -视图跳转时间(单位/s)
* @param {Number} -相机航向角
* @param {Number} -相机俯仰角
* @param {Number} -相机翻滚角
*/
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 {} viewer -地图对象
* @param {Object} option -参数对象
* @param {Array} -跳转椭球体中心坐标数组[x,y,z]
* @param {Number} -跳转椭球体半径(单位/m)
* @param {Number} -视图跳转时间(单位/s)
* @param {Number} -相机航向角
* @param {Number} -相机俯仰角
* @param {Number} -以跳转坐标为中心的的范围大小(单位/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实体上 === (entity),不可用于视角跟踪实体对象
* @param {} viewer -地图对象
* @param {Object} option -参数对象
* @param {Object} -target可以是单个或者多个entity对象,以及各自cesium支持的图层,不能是坐标
* @param {Number} -视图跳转时间(单位/s)
* @param {Number} -相机航向角
* @param {Number} -相机俯仰角
* @param {Number} -以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,
});
}