riku
2024-05-12 fb876cbc3b21035125668f2db6ee84e47efb544f
src/utils/map/animation.js
@@ -3,7 +3,7 @@
import Layer from '@/utils/map/3dLayer';
import sector from '@/utils/map/sector';
import { map } from '@/utils/map/index_old';
import util from "@/utils/map/util";
import util from '@/utils/map/util';
import car_driving from '@/assets/mipmap/car_driving.png';
import boat_driving from '@/assets/mipmap/boat_driving.png';
@@ -11,7 +11,7 @@
  // 非连续坐标点最大距离(米)
  this.maxD = 500;
  // 当前绘制的监测因子类型
  this.factorType = 0;
  this.factorType;
  this.factorDatas;
  // 载具类型
  this.vehicleType = 0; // 0: 车辆;1:无人机:2:无人船
@@ -21,6 +21,7 @@
  this._fps = this.frameAnimation.fps;
  // 绘制图形缓存
  this.moveViews = {};
  this.clear = true;
}
MapAnimation.prototype = {
@@ -116,7 +117,7 @@
      var fData2 = factorDatas.getByIndex(i + 1, i + 2);
      // 计算动画轨迹
      for (let i = 0; i < count - 1; i++) {
      for (let i = 0; i < count; i++) {
        // path
        var length = d * (i + 1);
        if (isNaN(angle)) {
@@ -149,26 +150,25 @@
        animationData,
        function (data, index, count) {
          var length = data.length();
          var start = length - count + 1;
          var start = length - count;
          // 1.获取数据
          var d = data.getByIndex(0, start + index + 1);
          var f = d.factor[that.factorType + 1 + ''];
          var f = d.factor[that.factorType];
          // 2.绘制图形
          if (length > count || index > 0) {
            // 3d图形
            // var lnglat = d.lnglats_GD[d.lnglats_GD.length - 1];
            Layer.drawMesh(d, f);
            // MapUtil.drawLine(lnglat)
            // 风向风速
            sector.drawSector(d, start + index);
            // if (d.factor['17'] != undefined && d.factor['16'] != undefined) {
            //   var windDir = d.factor['17'].datas;
            //   windDir = windDir[windDir.length - 1].factorData;
            //   var windSpeed = d.factor['16'].datas;
            //   windSpeed = windSpeed[windSpeed.length - 1].factorData;
            //   MapUtil.drawSector4(lnglat, windDir, windSpeed);
            // }
            sector.drawSectorAna(d, start + index);
            // 执行监听函数
            if (typeof that.OnEachFrameCallback === 'function') {
              that.OnEachFrameCallback(d, start + index);
            }
            // 绘制3D图形时,最少需要2个点才可绘制图形
            // 因此此处索引只到倒数第二个点就结束,此时执行这段任务结束的监听回调
            if (typeof that.OnEachTaskEndCallback === 'function') {
              that.OnEachTaskEndCallback(d);
            }
          }
          var pos = d.lnglats_GD[d.lnglats_GD.length - 1];
@@ -210,9 +210,27 @@
    this.start();
  },
  /**
   * 设置每一帧的监听函数
   * @param {Function} callback
   */
  setOnEachFrameCallback(callback) {
    this.OnEachFrameCallback = callback;
  },
  /**
   * 设置每一段任务结束的监听函数
   * @param {Function} callback
   */
  setOnEachTaskEndCallback(callback) {
    this.OnEachTaskEndCallback = callback;
  },
  /*******************************动画任务逻辑 -start ******************************/
  start: function () {
    sector.clearSector();
    if (this.frameAnimation.isStop) {
      sector.clearSector();
    }
    this.frameAnimation.start();
  },
  changeSpeed: function (speed) {
@@ -224,6 +242,8 @@
  stop: function () {
    this.factorDatas = undefined;
    this.frameAnimation.addOnNextTasks(undefined);
    // this.OnEachFrameCallback = undefined;
    // this.OnEachTaskEndCallback = undefined;
    this.frameAnimation.stop();
  },
  setOnStopCallback: function (callback) {
@@ -252,6 +272,8 @@
  /*******************************动画任务逻辑 -end ******************************/
  _clearMap: function () {
    if (!this.clear) return;
    var list = [];
    for (const key in this.moveViews) {
      list.push(this.moveViews[key]);
@@ -396,4 +418,7 @@
  }
};
export { MapAnimation };
const realTimeMapAnimation = new MapAnimation();
realTimeMapAnimation.clear = false;
export { realTimeMapAnimation, MapAnimation };