feiyu02
2025-03-21 da67648220f86993fac22b8199165995df3d8563
src/utils/map/sector.js
@@ -1,6 +1,7 @@
import { map, object3Dlayer } from './index_old';
import calculate from './calculate';
import imgLocation from '@/assets/mipmap/location.png';
import { FactorDatas } from '@/model/FactorDatas';
var _defaultDeg = 30,
  _sector = undefined,
@@ -76,7 +77,7 @@
          content: content,
          offset: [-35, 0],
          position: 'BM',
          minZoom: 15
          minZoom: 10
        }
      }
    ],
@@ -107,6 +108,9 @@
}
function drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2) {
  if (distance == 0 || distance2 == 0) {
    return false;
  }
  // eslint-disable-next-line no-undef
  var sector = new AMap.Object3D.Mesh();
  sector.transparent = true;
@@ -124,16 +128,16 @@
    var angle1 = sDeg + unitDeg * i;
    var angle2 = sDeg + unitDeg * (i + 1);
    var l1 = calculate.getLatLon(lnglat, distance, angle1);
    var l2 = calculate.getLatLon(lnglat, distance, angle2);
    var l3 = calculate.getLatLon(lnglat, distance2, angle1);
    var l4 = calculate.getLatLon(lnglat, distance2, angle2);
    var p1 = calculate.getLatLon(lnglat, distance, angle1);
    var p2 = calculate.getLatLon(lnglat, distance, angle2);
    var p3 = calculate.getLatLon(lnglat, distance2, angle1);
    var p4 = calculate.getLatLon(lnglat, distance2, angle2);
    var coors = calculate.lngLatToGeodeticCoord([l1, l2, l3, l4]);
    l1 = coors[0];
    l2 = coors[1];
    l3 = coors[2];
    l4 = coors[3];
    var coors = calculate.lngLatToGeodeticCoord([p1, p2, p3, p4]);
    const l1 = coors[0];
    const l2 = coors[1];
    const l3 = coors[2];
    const l4 = coors[3];
    // 内测扇形
    geometry.vertices.push(p0.x, p0.y, 0);
@@ -163,6 +167,7 @@
  }
  object3Dlayer.add(sector);
  _sector = sector;
  return true;
}
function drawTextMaker(list, list2, distance, distance2) {
@@ -211,6 +216,9 @@
}
export default {
  /**
   * 清空扇形和文本标记
   */
  clearSector() {
    var list = [];
    for (const iterator of _sectorViews) {
@@ -225,26 +233,44 @@
    }
    this.clearSectorMesh();
  },
  /**
   * 只清空扇形
   */
  clearSectorMesh() {
    if (_sector) {
      object3Dlayer.remove(_sector);
    }
  },
  sectorParams: sectorParams,
  /**
   * 绘制扇形
   * @param {FactorDatas} fDatas
   * @param {number} i
   * @returns 数据坐标点和扇形最大半径
   */
  drawSector(fDatas, i) {
    if (_sector != undefined) {
      this.clearSector();
    }
    this.clearSector();
    const { sDeg, eDeg, lnglat, distance, distance2, list, list2 } =
      sectorParams(fDatas, i);
    drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2);
    drawElasticMarker(list, list2, distance, distance2);
    if (drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2)) {
      // 当风速大于0绘制了扇形时,才绘制对应的距离等文本标记
      // drawElasticMarker(list, list2, distance, distance2);
      drawTextMaker(list, list2, distance, distance2);
    }
    return { p: lnglat, r: distance };
  },
  /**
   * 绘制轨迹动画中的扇形
   * @param {FactorDatas} fDatas
   * @param {number} i
   */
  drawSectorAna(fDatas, i) {
    this.clearSectorMesh();
    const { sDeg, eDeg, lnglat, distance, distance2, list, list2 } =
      sectorParams(fDatas, i);
    drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2);
    drawTextMaker(list, list2, distance, distance2);
    if (drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2)) {
      drawTextMaker(list, list2, distance, distance2);
    }
  }
};