cesium模型轨迹移动

1.把时间轴和动画面板打开
2.数据集合

 data() {
    return {
      list: [
        {
          lon: 116.405419,
          lat: 39.918034,
          height: 0,
          // sjtime: "2022-02-22T08:25:57.000+0800",
          time: 1656047671018,
        },
        {
          lon: 116.2821,
          lat: 39.918145,
          height: 0,
          // sjtime: "2022-02-22T08:26:27.000+0800",
          time: 1656047771018,
        },
        {
          lon: 115.497402,
          lat: 39.344641,
          height: 0,
          // sjtime: "2022-02-22T08:26:57.000+0800",
          time: 1656047871018,
        },
      ],
    };
  },

3.逻辑代码

// 添加轨迹
    addLine(val,color){
      val.forEach((item) =>{
        cViewer.entities.add({
          polyline: {
          //位置
            positions: Cesium.Cartesian3.fromDegrees(item.lon, item.lat, item.height),  
            //线宽
            width: 5, 
            //路线颜色 
            material: new Cesium.Color.fromCssColorString(color),
            //是否贴地
            clampToGround: true,
          },
        });
      })  
    },
    
    // 位置信息
    computeFlight(list) {
      var property = new Cesium.SampledPositionProperty();
      // 取样位置 相当于一个集合
      for (var z = 0; z < list.length; z++) {
        var item = list[z];
        var thisTime = Cesium.JulianDate.fromDate(new Date(item.time));
        var position = Cesium.Cartesian3.fromDegrees(
          list[z].lon,
          list[z].lat,
          list[z].height
        );

        // 添加每一个链接点的信息,到达的时间以及坐标位置
        property.addSample(thisTime, position);
      }
      return property;
    },
    
	// 添加模型动画
    modelAnimate(list,modelGltf){
	  //添加路线
	  let color = 'red';
	  this.addLine(list,color);
	  
      // 开始时间
      var date = new Date(list[0].time);
      var start = Cesium.JulianDate.fromDate(date); //获取第一个点的时间

      // 设置始时钟始时间
      cViewer.clock.startTime = start.clone();
      // 设置时钟当前时间
      cViewer.clock.currentTime = start.clone();
      // 时间速率,数字越大时间过的越快
      cViewer.clock.multiplier = 10;

      let property = this.computeFlight(list);
	  
	  // 设置始终停止时间
      var times = property._property._times;
      var stop = times[times.length - 1];   
      cViewer.clock.stopTime = stop.clone();

      // 时间轴
      cViewer.timeline.zoomTo(start, stop);
      // 循环执行,即为2,到达终止时间,重新从起点时间开始
      cViewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;

      let planeModel = cViewer.entities.add({
        // 和时间轴关联
        availability: new Cesium.TimeIntervalCollection([
          new Cesium.TimeInterval({
            start: start,
            stop: stop,
          }),
        ]),
        position: property,
        // 根据所提供的速度计算模型的朝向
        orientation: new Cesium.VelocityOrientationProperty(property),
        // 模型数据
        model: {
          uri: modelGltf,
          scale: 1,
          minimumPixelSize: 90,
        },
      });
    }

4.调用

   this.modelAnimate(this.list,'文件');

根据这两位大佬写的代码
https://blog.csdn.net/A873054267/article/details/86231494
https://blog.csdn.net/qq_42129143/article/details/125449327

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cesium是一种用于地球数据可视化的开源JavaScript库,它可以通过按曲线移动来实现场景的平移和缩放。 要按曲线移动,您可以使用Cesium的camera.flyTo()方法,该方法使场景沿着指定的曲线移动到新的位置和方向。您可以使用以下步骤来实现曲线移动: 1. 创建一个Cesium.Cartesian3对象,该对象表示您要将场景移动到的位置。 2. 创建一个Cesium.Cartesian3对象,该对象表示您要将场景指向的方向。 3. 创建一个Cesium.Cartesian3对象,该对象表示您要将相机移动到的位置。 4. 使用Cesium.Cartesian3的slerp()方法创建一条曲线,该曲线描述相机从当前位置到新位置的移动过程。 5. 使用camera.flyTo()方法将相机沿着曲线移动到新位置和方向。 以下是一个使用Cesium按曲线移动的示例代码: ```javascript //创建Cartesian3对象,表示场景将移动到的位置 var destination = Cesium.Cartesian3.fromDegrees(-75.5847, 40.0397, 1500); //创建Cartesian3对象,表示相机将指向的方向 var orientation = new Cesium.HeadingPitchRoll.fromDegrees(0, -90, 0); //创建Cartesian3对象,表示相机将移动到的位置 var position = Cesium.Cartesian3.fromDegrees(-75.5847, 40.0397, 3000); //使用Cartesian3的slerp()方法创建一条曲线,描述相机从当前位置到新位置的移动过程 var flightPath = new Cesium.CatmullRomSpline({ times: [0.0, 1.0], points: [ camera.position.clone(), position ] }); //使用camera.flyTo()方法将相机沿着曲线移动到新位置和方向 viewer.camera.flyTo({ destination: destination, orientation: orientation, duration: 3.0, complete: function() { console.log('Camera flight complete.'); } }); ``` 请注意,上述代码示例中使用的参数仅用于说明目的,您需要根据您的具体场景和需求来设置这些参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值