From b87b2befa85bd085f40dc5aa7ea9bfbc17d807e5 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 10 一月 2025 17:15:02 +0800
Subject: [PATCH] 1. 调整了网格内文本的展示方式和样式; 2. 省去了单个网格4个顶点坐标的计算逻辑,交由后端完成;

---
 src/utils/map/grid.js |  145 +++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 131 insertions(+), 14 deletions(-)

diff --git a/src/utils/map/grid.js b/src/utils/map/grid.js
index e5d5273..7f37bf6 100644
--- a/src/utils/map/grid.js
+++ b/src/utils/map/grid.js
@@ -84,20 +84,72 @@
  * 鏂囨湰鏍囪
  * 鍙慨鏀筽osition
  */
-function textMaker(position, text) {
+function textMaker(position, text, anchor, type) {
+  let style = {};
+  if (type == 'data') {
+    style = {
+      'font-size': '12px',
+      'text-align': 'center',
+      color: 'white',
+      background: '#122b54a9',
+      'text-shadow': 'black 2px 2px 2px',
+      border: '0px',
+      'margin-top': '4px'
+    };
+  } else if (type == 'rank') {
+    style = {
+      'font-size': '14px',
+      'text-align': 'center',
+      color: 'white',
+      background: 'transparent',
+      'text-shadow': 'black 2px 2px 2px',
+      'border-radius': '2px',
+      border: '1px solid #122b54a9',
+      'margin-bottom': '4px'
+    };
+  }
   // eslint-disable-next-line no-undef
   return new AMap.Text({
     text: text,
+    anchor,
     position: position,
-    style: {
-      'font-size': '13px',
-      'text-align': 'center',
-      color: 'white',
-      'background-color': 'transparent',
-      'text-shadow': 'black 2px 2px 2px',
-      'border-radius': '2px',
-      border: '0px',
-      padding: '4px'
+    style: style
+  });
+}
+
+/**
+ * 娴烽噺鏂囨湰鏍囨敞
+ */
+function textLabelMarker(position, text, direction, style) {
+  // eslint-disable-next-line no-undef
+  return new AMap.LabelMarker({
+    position: position,
+    zooms: [10, 20],
+    opacity: 1,
+    zIndex: 2,
+    // icon: {
+    //   image: 'https://a.amap.com/jsapi_demos/static/images/poi-marker.png',
+    //   anchor: 'bottom-center',
+    //   size: [25, 34],
+    //   clipOrigin: [459, 92],
+    //   clipSize: [50, 68]
+    // },
+    text: {
+      // 娉ㄦ剰鍐呭鏍煎紡蹇呴』鏄痵tring
+      content: text ? text + '' : '',
+      direction: direction ? direction : 'center',
+      style: {
+        'border-radius': '.25rem',
+        fontSize: 12,
+        fillColor: '#fff',
+        strokeColor: 'rgba(0, 0, 0, 1)',
+        strokeWidth: 4,
+        // backgroundColor: '#122b54a9',
+        padding: [3, 10],
+        // backgroundColor: 'yellow',
+        borderColor: '#ccc',
+        borderWidth: 30
+      }
     }
   });
 }
@@ -166,7 +218,7 @@
     return gridViews;
   },
 
-  drawGridText(points, textViews) {
+  drawGridText(points, textViews, anchor, type) {
     if (textViews) {
       points.forEach((p, i) => {
         textViews[i].setPosition(p.lnglat_GD);
@@ -176,11 +228,46 @@
     } else {
       const _textViews = [];
       points.forEach((p) => {
-        const m = textMaker(p.lnglat_GD, p.data);
+        const m = textMaker(p.lnglat_GD, p.data, anchor, type);
         _textViews.push(m);
       });
       map.add(_textViews);
-      return _textViews;
+      return { textViews: _textViews };
+    }
+  },
+
+  drawGridTextLabel(points, textViews, labelsLayer, direction) {
+    if (textViews) {
+      points.forEach((p, i) => {
+        textViews[i].setPosition(p.lnglat_GD);
+        textViews[i].setText({
+          content: p.data ? p.data + '' : ''
+        });
+      });
+      return { textViews, labelsLayer };
+    } else {
+      // 鍒涘缓涓�涓� LabelsLayer 瀹炰緥鏉ユ壙杞� LabelMarker锛孾LabelsLayer 鏂囨。](https://lbs.amap.com/api/jsapi-v2/documentation#labelslayer)
+      // eslint-disable-next-line no-undef
+      const labelsLayer = new AMap.LabelsLayer({
+        zooms: [12, 20],
+        zIndex: 1000,
+        // 寮�鍚爣娉ㄩ伩璁╋紝榛樿涓哄紑鍚紝v1.4.15 鏂板灞炴��
+        collision: false,
+        // 寮�鍚爣娉ㄦ贰鍏ュ姩鐢伙紝榛樿涓哄紑鍚紝v1.4.15 鏂板灞炴��
+        animation: false
+      });
+      const _textViews = [];
+      points.forEach((p) => {
+        const m = textLabelMarker(p.lnglat_GD, p.data, direction);
+        _textViews.push(m);
+        // 灏� LabelMarker 瀹炰緥娣诲姞鍒� LabelsLayer 涓�
+        labelsLayer.add(m);
+      });
+      map.add(labelsLayer);
+      // map.on('zoomend', () => {
+      //   console.log(map.getZoom());
+      // });
+      return { textViews: _textViews, labelsLayer };
     }
   },
 
@@ -197,7 +284,37 @@
       );
       g.setOptions({
         fillColor: _color,
-        fillOpacity: color[3]
+        fillOpacity: color[3] == 0 ? 0 : 0.7
+      });
+    });
+  },
+
+  drawGridColorCustom(gridViews, texts) {
+    var max, min;
+    texts.forEach((t) => {
+      if (!t) return;
+      if (!max || t > max) {
+        max = t;
+      }
+      if (!min || t < min) {
+        min = t;
+      }
+    });
+    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 _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
       });
     });
   }

--
Gitblit v1.9.3