cesium相机视角跳转定位方法汇总

时间:2025-05-12 10:49:52
  • 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,
  • });
  • }