Cesium-取相机飞行参数

heading (方位角),pitch (倾角),roll(旋转角), range(距离中心距离)

let opt = {
      position: [117.74447781803329, 30.663937066156883, 225.23452906567712],
      heading: 4.7124621698699425,
      pitch: -0.17465633785744084,
      roll: 6.283185197024551,
      duration:5
    };
let entity = new Cesium.Entity({
      name: "飞行",
      position: Cesium.Cartesian3.fromDegrees(
        opt.position[0],opt.position[1],opt.position[2]
      ),
      point: {
        pixelSize: 10,
        color: Cesium.Color.WHITE.withAlpha(0),
        outlineColor: Cesium.Color.WHITE.withAlpha(0),
        outlineWidth: 0
      }
    });
viewer.entities.add(entity);

1.viewer.zoomTo

       viewer.zoomTo(entity ,{
            heading:opt.heading,
            pitch:opt.pitch,
            range:opt.range
        })
        //或者 viewer.zoomTo(viewer.entities)

2.viewer.flyTo

 viewer
      .flyTo(entity, {
        offset: {
          heading: opt.heading,
          pitch:opt.pitch,
          roll: opt.roll
        },
        duration: opt.duration // 设置飞行持续时间,默认会根据距离来计算
      })
      .then(e => {
        func & func();
      });

3.viewer.camera.flyTo
viewer.camera.flyTo 也是通过动画的方式转移到某个位置, 参数比viewer.flyTo要多

viewer.camera.flyTo({
            destination: Cesium.Cartesian3.fromDegrees(107.0, 40.0, 5000000), //摄像机的最终位置
            duration: 3,                           //飞行所用时间
            maximumHeight: 20000,                  //飞行高峰时的最大高度。
            pitchAdjustHeight: 1500,               //如果摄像机的飞行高于此值,请调整俯仰航向以降低俯仰,并将地球保持在视野中
            orientation: {
                heading: opt.heading, //方位角
                pitch: opt.pitch,  //倾角
                roll: opt.roll     //旋转角
            }
        });

4.viewer.camera.lookAt
立即定位到某个位置, 而且相机锁住此位置。

var center = Cesium.Cartesian3.fromDegrees(-107,40,0)//目标位置
        viewer.camera.lookAt(center, new Cesium.Cartesian3(x,x,x);//三个参数数字分别是:方位角,倾角,俯角

5.viewer.camera.setView
将摄像机定位到某个位置

viewer.camera.setView({
            destination : Cesium.Cartesian3.fromDegrees(107.0, 40.0, 5000000),//相机位置
            orientation: {
                heading :opt.heading, //方位角
                pitch : opt.pitch, //倾角
                roll : opt.roll   //旋转角            
            }
        });

附:相机参数获取

//将坐标转化为84坐标
get84Cood(positon) {
    let zb = Cesium.Cartographic.fromCartesian(positon);
    let lat = Cesium.Math.toDegrees(zb.latitude);
    let lon = Cesium.Math.toDegrees(zb.longitude);
    let height = zb.height;
    return {
      lon,
      lat,
      height
    };
  }
//获取相机参数
getCamera() {
    let p = this.get84Cood(viewer.camera.position);
    let position = [p.lon, p.lat, p.height];
    return {
      position,
      heading: viewer.camera.heading,
      pitch: viewer.camera.pitch,
      roll: viewer.camera.roll
    };
  }

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Cesium中的flyTo函数是用于实现相机平滑移动和缩放的效果。它接受一个参数对象,包含以下可选属性: - destination:一个Cartesian3对象,表示相机要飞往的目标位置的笛卡尔坐标。如果提供了此属性,相机将以线性方式移动到目标位置。 - orientation:一个HeadingPitchRoll对象,表示相机飞行结束后的方向。如果提供了此属性,相机将以线性方式旋转到指定方向。 - duration:一个数字,表示飞行到目标位置的持续时间(以秒为单位)。如果未提供此属性,则默认为3秒。 - easingFunction:一个easing函数,用于控制飞行过程中的速度变化。可以使用Cesium.EasingFunction中的预定义函数,或者自定义一个函数。 - complete:一个回调函数,在飞行动画完成后调用。 这些参数可以根据需要自由组合使用,以实现不同的相机飞行效果。请注意,destination和orientation属性不能同时使用,否则会抛出异常。 例如,以下代码将使相机平滑地飞往目标位置,并在结束后旋转到指定方向: ```javascript viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(longitude, latitude, height), orientation: { heading: Cesium.Math.toRadians(heading), pitch: Cesium.Math.toRadians(pitch), roll: 0.0 }, duration: 5.0, easingFunction: Cesium.EasingFunction.LINEAR_NONE, complete: function() { console.log('Camera flight complete.'); } }); ``` 希望这能回答到你的问题!如果还有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值