From 026f17ebafb85250d9ae9b71b80ae5f07341c172 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 15 五月 2025 16:33:12 +0800
Subject: [PATCH] 动态溯源功能初步完成

---
 src/utils/map/sector.js |  131 ++++++++++++++++++++++++++++++-------------
 1 files changed, 92 insertions(+), 39 deletions(-)

diff --git a/src/utils/map/sector.js b/src/utils/map/sector.js
index 25ae2d5..f409e4d 100644
--- a/src/utils/map/sector.js
+++ b/src/utils/map/sector.js
@@ -9,6 +9,9 @@
   // 鍔ㄧ敾杞ㄨ抗
   _sectorViewsAna = new Map();
 
+var _ptSector = undefined,
+  _ptSectorViews = new Map();
+
 const zoomStyleMapping = {
   14: 0,
   15: 0,
@@ -107,7 +110,14 @@
   });
 }
 
-function drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2) {
+function drawSectorMesh(
+  sDeg,
+  eDeg,
+  lnglat,
+  distance,
+  distance2,
+  isPollutinTrace
+) {
   if (distance == 0 || distance2 == 0) {
     return false;
   }
@@ -143,59 +153,77 @@
     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');
   }
 }
 
@@ -232,6 +260,19 @@
       _sectorViews.clear();
     }
     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);
+    }
   },
   /**
    * 鍙竻绌烘墖褰�
@@ -272,5 +313,17 @@
     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