Cesium设置时间类

// 场景时钟类
export default class SceneClock {
  viewer;
  multiplier;

  constructor(viewer) {
    this.viewer = viewer;
  }

  /**
   * 设置场景时钟
   * @param start 开始时间
   * @param stop 结束时间
   * @param multiplier 场景时间倍速,默认是 1 倍速
   */
  setSceneClock(start, stop, multiplier = 32) {
    const startTime = Cesium.JulianDate.fromDate(start);
    const stopTime = Cesium.JulianDate.fromDate(stop);

    this.viewer.clock.startTime = startTime.clone();
    this.viewer.clock.stopTime = stopTime.clone();
    this.viewer.clock.currentTime = startTime.clone();
    this.viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
    this.viewer.clock.multiplier = multiplier;
    this.viewer.timeline.zoomTo(startTime.clone(), stopTime.clone())
    this.multiplier = multiplier;
  }

  /**
   * 快进时间
   * @param seconds 快进多少秒,默认30秒
   */
  stepUp(seconds = 30) {
    if (seconds <= 0) {
      return;
    }

    const currentTime = Cesium.JulianDate.addSeconds(
      this.viewer.clock.currentTime,
      seconds,
      new Cesium.JulianDate()
    );

    this.viewer.clock.currentTime = currentTime;
  }

  /**
   * 后退时间
   * @param seconds 后退多少秒,默认-30秒
   */
  stepBack(seconds = -30) {
    if (seconds >= 0) {
      return;
    }

    const currentTime = Cesium.JulianDate.addSeconds(
      this.viewer.clock.currentTime,
      seconds,
      new Cesium.JulianDate()
    );

    this.viewer.clock.currentTime = currentTime;
  }

  /**
   * 场景时间加速
   * @param multiplier 
   * @returns 当前场景倍速
   */
  accelerateClock(multiplier = 2) {
    this.viewer.clockViewModel.multiplier *= multiplier;
    return this.viewer.clockViewModel.multiplier
  }

  /**
   * 场景时间减速
   * @param multiplier 
   * @returns 当前场景倍速
   */
  decelerateClock(multiplier = 2) {
    this.viewer.clockViewModel.multiplier /= multiplier;
    return this.viewer.clockViewModel.multiplier
  }

  /**
   * 是否开启场景动画
   * @param state 
   */
  shouldAnimate(state) {
    this.viewer.clock.shouldAnimate = state;
  }

  // 重置场景时钟
  reset() {
    this.viewer.clock.shouldAnimate = false;
    this.viewer.clock.multiplier = this.multiplier;
    this.viewer.clock.currentTime = this.viewer.clock.startTime;
  }

  // 设置当前时间
  setCurrentTime(time) {
    this.viewer.clock.currentTime = Cesium.JulianDate.fromDate(time);
  }
  /**
   * 获取当前场景时间
   * @param callback 回调函数接收当前场景时间
   */
  getCurrentScenarioTime(callback) {
    this.viewer.scene.preUpdate.addEventListener((s, time) => {
      callback(Cesium.JulianDate.toDate(time));
    })
  }
  // 设置当前速率
  setMultiplier(multiplier = 1) {
    this.viewer.clock.multiplier = multiplier;
  }

  /**
   * 获取场景的开始与结束时间
   * @returns 场景的开始与结束时间
   */
  getSceneTime() {
    const startTime = new Date(Cesium.JulianDate.toDate(this.viewer.clock.startTime)),
      stopTime = new Date(Cesium.JulianDate.toDate(this.viewer.clock.stopTime));

    //  转换为UTC时间,28800000(8小时)
    const startTimeUTC = new Date(startTime.getTime() - 28800000).format('yyyy-MM-dd hh:mm:ss'),
      endTimeUTC = new Date(stopTime.getTime() - 28800000).format('yyyy-MM-dd hh:mm:ss');

    return {
      startTimeUTC,
      endTimeUTC
    };
  }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值