From 0b700614e2f3e41df4655ba5469217e009c246ac Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期一, 24 二月 2025 17:09:13 +0800
Subject: [PATCH] 1. 初步完成走航融合相关功能

---
 src/utils/map/grid.js |  194 +++++++++++++++++++++++++++++++++---------------
 1 files changed, 134 insertions(+), 60 deletions(-)

diff --git a/src/utils/map/grid.js b/src/utils/map/grid.js
index 7f37bf6..49b87d9 100644
--- a/src/utils/map/grid.js
+++ b/src/utils/map/grid.js
@@ -193,47 +193,61 @@
 
   /**
    * 缁樺埗涓�缁勫杈瑰舰
-   * @param {*} points
+   * @param {Array} points 缃戞牸鍧愭爣鐐规暟缁�
+   * @param {Boolean} draw 鏄惁鍒涘缓瀹屾垚鍚庡悓鏃剁粯鍒�
    */
-  drawPolylines(points) {
+  drawPolylines({ points, draw, event }) {
     const gridViews = [];
     points.forEach((p) => {
-      let path = p.map((v) => {
-        // eslint-disable-next-line no-undef
-        return new AMap.LngLat(v[0], v[1]);
-      });
       //鍒涘缓澶氳竟褰� Polygon 瀹炰緥
       // eslint-disable-next-line no-undef
       var polygon = new AMap.Polygon({
-        path: path, //璺緞
+        path: p.path, //璺緞
         fillColor: '#fff', //澶氳竟褰㈠~鍏呴鑹�
         strokeWeight: 1, //绾挎潯瀹藉害锛岄粯璁や负 2
         strokeColor: 'white', //绾挎潯棰滆壊
-        fillOpacity: 0
+        fillOpacity: 0,
+        extData: p.extData
       });
+
+      if (typeof event === 'function') {
+        event(polygon);
+      }
       gridViews.push(polygon);
     });
-    map.add(gridViews);
-    map.setFitView(gridViews);
+    if (draw) {
+      map.add(gridViews);
+      map.setFitView(gridViews);
+    }
     return gridViews;
   },
 
   drawGridText(points, textViews, anchor, type) {
+    // if (textViews) {
+    //   points.forEach((p, i) => {
+    //     textViews[i].setPosition(p.lnglat_GD);
+    //     textViews[i].setText(p.data);
+    //   });
+    //   return textViews;
+    // } else {
+    //   const _textViews = [];
+    //   points.forEach((p) => {
+    //     const m = textMaker(p.lnglat_GD, p.data, anchor, type);
+    //     _textViews.push(m);
+    //   });
+    //   map.add(_textViews);
+    //   return { textViews: _textViews };
+    // }
     if (textViews) {
-      points.forEach((p, i) => {
-        textViews[i].setPosition(p.lnglat_GD);
-        textViews[i].setText(p.data);
-      });
-      return textViews;
-    } else {
-      const _textViews = [];
-      points.forEach((p) => {
-        const m = textMaker(p.lnglat_GD, p.data, anchor, type);
-        _textViews.push(m);
-      });
-      map.add(_textViews);
-      return { textViews: _textViews };
+      map.remove(textViews);
     }
+    const _textViews = [];
+    points.forEach((p) => {
+      const m = textMaker(p.lnglat_GD, p.data, anchor, type);
+      _textViews.push(m);
+    });
+    // map.add(_textViews);
+    return { textViews: _textViews };
   },
 
   drawGridTextLabel(points, textViews, labelsLayer, direction) {
@@ -271,51 +285,111 @@
     }
   },
 
-  drawGridColor(gridViews, texts, factorName) {
-    gridViews.forEach((g, i) => {
-      const data = parseFloat(texts[i]);
-      const { color, nextColor, range, nextRange } =
-        Legend.getStandardColorAndNext(factorName, data);
-      const ratio = (data - range) / (nextRange - range);
-      const _color = getColorBetweenTwoColors(
-        color.map((v) => v * 255),
-        nextColor.map((v) => v * 255),
-        ratio
-      );
-      g.setOptions({
-        fillColor: _color,
-        fillOpacity: color[3] == 0 ? 0 : 0.7
-      });
+  /**
+   * 鏍规嵁閬ユ祴鏁版嵁锛岃缃搴旂綉鏍肩殑鏍囧噯鑹诧紝杩斿洖鏈夋暟鎹殑缃戞牸
+   * @param {Array} gridViews 缃戞牸澶氳竟褰㈠璞℃暟缁�
+   * @param {Array} gridDataDetail 鍗槦閬ユ祴鏁版嵁鏁扮粍
+   * @param {string} factorName 鐩戞祴鍥犲瓙鍚嶇О
+   * @param {number} opacity 閫忔槑搴�
+   */
+  drawGridColor(gridViews, gridDataDetail, factorName, opacity, zIndex) {
+    const res = [];
+    // 閬嶅巻鍗槦閬ユ祴鏁版嵁鏁扮粍
+    gridDataDetail.forEach((d, i) => {
+      if (d.pm25) {
+        const grid = gridViews[i];
+
+        // 鏍规嵁閬ユ祴鏁版嵁璁$畻缃戞牸棰滆壊
+        const data = d.pm25;
+        const { color, nextColor, range, nextRange } =
+          Legend.getStandardColorAndNext(factorName, data);
+        const ratio = (data - range) / (nextRange - range);
+        const _color = getColorBetweenTwoColors(
+          color.map((v) => v * 255),
+          nextColor.map((v) => v * 255),
+          ratio
+        );
+        grid.setOptions({
+          zIndex: zIndex ? zIndex : 10,
+          fillColor: _color,
+          fillOpacity: opacity ? opacity : color[3] == 0 ? 0 : 0.7
+        });
+
+        res.push(grid);
+      }
     });
+
+    return res;
+    // gridViews.forEach((g, i) => {
+    //   const data = parseFloat(gridDataDetail[i]);
+    //   const { color, nextColor, range, nextRange } =
+    //     Legend.getStandardColorAndNext(factorName, data);
+    //   const ratio = (data - range) / (nextRange - range);
+    //   const _color = getColorBetweenTwoColors(
+    //     color.map((v) => v * 255),
+    //     nextColor.map((v) => v * 255),
+    //     ratio
+    //   );
+    //   g.setOptions({
+    //     fillColor: _color,
+    //     fillOpacity: color[3] == 0 ? 0 : 0.7
+    //   });
+    // });
   },
 
-  drawGridColorCustom(gridViews, texts) {
+  drawGridColorCustom(gridViews, gridDataDetail, opacity) {
     var max, min;
-    texts.forEach((t) => {
-      if (!t) return;
-      if (!max || t > max) {
-        max = t;
+    gridDataDetail.forEach((t) => {
+      if (!t.pm25) return;
+      if (!max || t.pm25 > max) {
+        max = t.pm25;
       }
-      if (!min || t < min) {
-        min = t;
+      if (!min || t.pm25 < min) {
+        min = t.pm25;
       }
     });
-    gridViews.forEach((g, i) => {
-      const data = parseFloat(texts[i]);
-      const { color, nextColor, range, nextRange } =
-        Legend.getCustomColorAndNext(data, min, max);
-      const ratio = (data - range) / (nextRange - range);
+    const res = [];
+    // 閬嶅巻鍗槦閬ユ祴鏁版嵁鏁扮粍
+    gridDataDetail.forEach((d, i) => {
+      if (d.pm25) {
+        const grid = gridViews[i];
 
-      const _color = getColorBetweenTwoColors(
-        color.map((v) => v * 255),
-        nextColor.map((v) => v * 255),
-        ratio
-      );
-      g.setOptions({
-        fillColor: _color,
-        // fillOpacity: color[3]
-        fillOpacity: color[3] == 0 ? 0 : 0.7
-      });
+        // 鏍规嵁閬ユ祴鏁版嵁璁$畻缃戞牸棰滆壊
+        const data = d.pm25;
+        const { color, nextColor, range, nextRange } =
+          Legend.getCustomColorAndNext(data, min, max);
+        const ratio = (data - range) / (nextRange - range);
+
+        const _color = getColorBetweenTwoColors(
+          color.map((v) => v * 255),
+          nextColor.map((v) => v * 255),
+          ratio
+        );
+        grid.setOptions({
+          fillColor: _color,
+          fillOpacity: opacity ? opacity : color[3] == 0 ? 0 : 0.7
+        });
+
+        res.push(grid);
+      }
     });
+
+    return res;
+    // gridViews.forEach((g, i) => {
+    //   const data = parseFloat(gridDataDetail[i]);
+    //   const { color, nextColor, range, nextRange } =
+    //     Legend.getCustomColorAndNext(data, min, max);
+    //   const ratio = (data - range) / (nextRange - range);
+
+    //   const _color = getColorBetweenTwoColors(
+    //     color.map((v) => v * 255),
+    //     nextColor.map((v) => v * 255),
+    //     ratio
+    //   );
+    //   g.setOptions({
+    //     fillColor: _color,
+    //     fillOpacity: color[3] == 0 ? 0 : 0.7
+    //   });
+    // });
   }
 };

--
Gitblit v1.9.3