From c2e36c45578e63ad17c5e258c92d62d9ae03dadb Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 30 五月 2025 11:55:52 +0800
Subject: [PATCH] Merge branch 'master' of ssh://114.215.109.124:29418/underway-vue

---
 src/utils/map/sector.js |  191 +++++++++++++++++++++++++++++++++--------------
 1 files changed, 135 insertions(+), 56 deletions(-)

diff --git a/src/utils/map/sector.js b/src/utils/map/sector.js
index 0e3ced6..f409e4d 100644
--- a/src/utils/map/sector.js
+++ b/src/utils/map/sector.js
@@ -1,12 +1,16 @@
 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,
   _sectorViews = new Map(),
   // 鍔ㄧ敾杞ㄨ抗
   _sectorViewsAna = new Map();
+
+var _ptSector = undefined,
+  _ptSectorViews = new Map();
 
 const zoomStyleMapping = {
   14: 0,
@@ -76,7 +80,7 @@
           content: content,
           offset: [-35, 0],
           position: 'BM',
-          minZoom: 15
+          minZoom: 10
         }
       }
     ],
@@ -106,7 +110,17 @@
   });
 }
 
-function drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2) {
+function drawSectorMesh(
+  sDeg,
+  eDeg,
+  lnglat,
+  distance,
+  distance2,
+  isPollutinTrace
+) {
+  if (distance == 0 || distance2 == 0) {
+    return false;
+  }
   // eslint-disable-next-line no-undef
   var sector = new AMap.Object3D.Mesh();
   sector.transparent = true;
@@ -124,73 +138,92 @@
     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);
     geometry.vertices.push(l3.x, l3.y, 0);
     geometry.vertices.push(l4.x, l4.y, 0);
-    // 澶栦晶鎵囧舰
-    geometry.vertices.push(l3.x, l3.y, 0);
-    geometry.vertices.push(l4.x, l4.y, 0);
-    geometry.vertices.push(l1.x, l1.y, 0);
-    geometry.vertices.push(l2.x, l2.y, 0);
+    if (!isPollutinTrace) {
+      // 鍐呮祴鎵囧舰棰滆壊
+      geometry.vertexColors.push(1, 0.11, 0.25, 0.6);
+      geometry.vertexColors.push(1, 0.11, 0.25, 0.6);
+      geometry.vertexColors.push(1, 0.11, 0.25, 0.6);
+    } else {
+      geometry.vertexColors.push(0.25, 0.11, 1, 0.6);
+      geometry.vertexColors.push(0.25, 0.11, 1, 0.6);
+      geometry.vertexColors.push(0.25, 0.11, 1, 0.6);
+    }
+
+    if (!isPollutinTrace) {
+      // 澶栦晶鎵囧舰
+      geometry.vertices.push(l3.x, l3.y, 0);
+      geometry.vertices.push(l4.x, l4.y, 0);
+      geometry.vertices.push(l1.x, l1.y, 0);
+      geometry.vertices.push(l2.x, l2.y, 0);
+      //澶栦晶鎵囧舰棰滆壊
+      geometry.vertexColors.push(1, 0.37, 0.07, 0.5);
+      geometry.vertexColors.push(1, 0.37, 0.07, 0.5);
+      geometry.vertexColors.push(1, 0.37, 0.07, 0.5);
+      geometry.vertexColors.push(1, 0.37, 0.07, 0.5);
+    }
     // console.log(l3.x + ',' + l3.y + ' | ' + l1.x + ',' + l1.y);
 
-    // 鍐呮祴鎵囧舰棰滆壊
-    geometry.vertexColors.push(1, 0.11, 0.25, 0.6);
-    geometry.vertexColors.push(1, 0.11, 0.25, 0.6);
-    geometry.vertexColors.push(1, 0.11, 0.25, 0.6);
-    //澶栦晶鎵囧舰棰滆壊
-    geometry.vertexColors.push(1, 0.37, 0.07, 0.5);
-    geometry.vertexColors.push(1, 0.37, 0.07, 0.5);
-    geometry.vertexColors.push(1, 0.37, 0.07, 0.5);
-    geometry.vertexColors.push(1, 0.37, 0.07, 0.5);
-
-    var index = i * 7;
-    geometry.faces.push(index, index + 1, index + 2);
-    geometry.faces.push(index + 3, index + 4, index + 5);
-    geometry.faces.push(index + 4, index + 5, index + 6);
+    if (!isPollutinTrace) {
+      const index = i * 7;
+      geometry.faces.push(index, index + 1, index + 2);
+      geometry.faces.push(index + 3, index + 4, index + 5);
+      geometry.faces.push(index + 4, index + 5, index + 6);
+    } else {
+      const index = i * 3;
+      geometry.faces.push(index, index + 1, index + 2);
+      // geometry.faces.push(index + 3, index + 4, index + 5);
+      // geometry.faces.push(index + 4, index + 5, index + 6);
+    }
   }
   object3Dlayer.add(sector);
-  _sector = sector;
+  isPollutinTrace ? (_ptSector = sector) : (_sector = sector);
+  return true;
 }
 
-function drawTextMaker(list, list2, distance, distance2) {
+function drawTextMaker(list, list2, distance, distance2, isPollutinTrace) {
+  const _sectorViewsTmp = isPollutinTrace ? _ptSectorViews : _sectorViews;
   //10鍒嗛挓鎵囧舰
-  const a = _sectorViews.get('text10-t');
-  if (a == undefined) {
-    const text10t = textMaker(list[2], '10鍒嗛挓');
-    _sectorViews.set('text10-t', text10t);
-    const textM10t = textMaker(list[1], distance + 'm');
-    _sectorViews.set('textM10-t', textM10t);
-    map.add([text10t, textM10t]);
-  } else {
-    _sectorViews.get('text10-t').setPosition(list[2]);
-    _sectorViews.get('textM10-t').setPosition(list[1]);
-    _sectorViews.get('textM10-t').setText(distance + 'm');
+  if (!isPollutinTrace) {
+    const a = _sectorViewsTmp.get('text10-t');
+    if (a == undefined) {
+      const text10t = textMaker(list[2], '10鍒嗛挓');
+      _sectorViewsTmp.set('text10-t', text10t);
+      const textM10t = textMaker(list[1], distance + 'm');
+      _sectorViewsTmp.set('textM10-t', textM10t);
+      map.add([text10t, textM10t]);
+    } else {
+      _sectorViewsTmp.get('text10-t').setPosition(list[2]);
+      _sectorViewsTmp.get('textM10-t').setPosition(list[1]);
+      _sectorViewsTmp.get('textM10-t').setText(distance + 'm');
+    } 
   }
   //5鍒嗛挓鎵囧舰
-  const b = _sectorViews.get('text5-t');
+  const b = _sectorViewsTmp.get('text5-t');
   if (b == undefined) {
     const text5t = textMaker(list2[1], '5鍒嗛挓');
-    _sectorViews.set('text5-t', text5t);
+    _sectorViewsTmp.set('text5-t', text5t);
     const textM5t = textMaker(list2[0], distance2 + 'm');
-    _sectorViews.set('textM5-t', textM5t);
+    _sectorViewsTmp.set('textM5-t', textM5t);
     map.add([text5t, textM5t]);
   } else {
-    _sectorViews.get('text5-t').setPosition(list2[1]);
-    _sectorViews.get('textM5-t').setPosition(list2[0]);
-    _sectorViews.get('textM5-t').setText(distance2 + 'm');
+    _sectorViewsTmp.get('text5-t').setPosition(list2[1]);
+    _sectorViewsTmp.get('textM5-t').setPosition(list2[0]);
+    _sectorViewsTmp.get('textM5-t').setText(distance2 + 'm');
   }
 }
 
@@ -211,6 +244,9 @@
 }
 
 export default {
+  /**
+   * 娓呯┖鎵囧舰鍜屾枃鏈爣璁�
+   */
   clearSector() {
     var list = [];
     for (const iterator of _sectorViews) {
@@ -225,26 +261,69 @@
     }
     this.clearSectorMesh();
   },
+  clearSectorPt() {
+    var list = [];
+    for (const iterator of _ptSectorViews) {
+      list.push(iterator[1]);
+    }
+    if (list.length > 0) {
+      map.remove(list);
+      _ptSectorViews.clear();
+    }
+    if (_ptSector) {
+      object3Dlayer.remove(_ptSector);
+    }
+  },
+  /**
+   * 鍙竻绌烘墖褰�
+   */
   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);
+    }
+  },
+
+  drawSectorPt(fDatas, i) {
+    if (_ptSector) {
+      object3Dlayer.remove(_ptSector);
+    }
+    const { sDeg, eDeg, lnglat, distance, distance2, list, list2 } =
+      sectorParams(fDatas, i);
+    if (drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2, true)) {
+      drawTextMaker(list, list2, distance, distance2, true);
+    }
+    return { p: lnglat, r: distance };
   }
 };

--
Gitblit v1.9.3