Cesium 模型移动、调转方向和视角跟随

const position = Cesium.Cartesian3.fromDegrees(
   116.401,
   39.89855,
   0
 );
const entity = this.viewer.entities.add({
   id: "cesiumMan",
   name: "data/gltf/Man.glb",
   position: position,
   model: {
     uri: 'data/gltf/Cesium_Man.glb',
     minimumPixelSize: 128,
     maximumScale: 20,
     scale: 1
   }
 });

以上是加载模型的方法

const viewer = this.viewer;
const dataP = [
  {
    lat: '39.898864999998416',
    lng: '116.4013140000069'
  },
  {
    lat: '39.89886799999828',
    lng: '116.40152700000996'
  },
  {
    lat: '39.89872399999817',
    lng: '116.40152700000996'
  },
  {
    lat: '39.898737999997984',
    lng: '116.401819000014'
  },
  {
    lat: '39.89886799999756',
    lng: '116.40181900001403'
  }
];

// 定义一个数组,存储物体运动的时间和位置点
const positionData = [];
for (let i = 0; i < dataP.length; ++i) {
  // addSeconds 用于在给定的秒数后添加时间 两个点所用时间就是这里设置 使用简单的线性间隔
  positionData.push({
    longitude: Number(dataP[i].lng),
    latitude:  Number(dataP[i].lat),
    time: i * 10
  });
}

// 创建一个采样器对象,用于插值计算物体运动的位置
const positionSampler = new Cesium.SampledPositionProperty();

positionSampler.setInterpolationOptions({
  interpolationDegree: 2,
  interpolationAlgorithm: Cesium.HermitePolynomialApproximation
});

const start = Cesium.JulianDate.fromDate(new Date(2023, 2, 29));

// 遍历数组,将时间和位置点添加到采样器对象中
for (let i = 0; i < positionData.length; i++) {
  const data = positionData[i];
  const time = new Cesium.JulianDate.addSeconds(start, data.time, new Cesium.JulianDate());
  const position = new Cesium.Cartesian3.fromDegrees(data.longitude, data.latitude);
  positionSampler.addSample(time, position);
}

const entity = viewer.entities.getById("cesiumMan")
entity.position = positionSampler;
entity.orientation = new Cesium.VelocityOrientationProperty(positionSampler); //根据坐标转头

// 定义时钟参数,设置开始时间、结束时间和当前时间 结束时间尤其重要 如果动画执行完了 结束时间没到,中间会空一段时间
// 反之动画还没结束 stop时间到了 那就会立刻再次重复 一段动画路径还没执行
var stop = Cesium.JulianDate.addSeconds(start, 50, new Cesium.JulianDate());

viewer.clock.startTime = start.clone();
viewer.clock.stopTime = stop.clone();
viewer.clock.currentTime = start.clone();
viewer.clock.shouldAnimate = true;
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
viewer.clock.multiplier = 2;

// 设置视角跟随物体运动,并显示信息框
viewer.trackedEntity = entity;
  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值