From 7607d55d6597d772de1a37598d36e74c4542223e Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期一, 05 二月 2024 17:33:00 +0800
Subject: [PATCH] 优化地图联动相关逻辑

---
 lib/map.js |  237 ++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 154 insertions(+), 83 deletions(-)

diff --git a/lib/map.js b/lib/map.js
index 5bf7a0d..e4a9a35 100644
--- a/lib/map.js
+++ b/lib/map.js
@@ -50,18 +50,49 @@
     this._map.remove(views);
   },
 
-  addMarkers(markers) {
+  addElasticMarkers(markers) {
+    const zoomStyleMapping = {
+      14: 0,
+      15: 0,
+      16: 0,
+      17: 0,
+      18: 0,
+      19: 0,
+      20: 0,
+    };
     const mList = [];
     markers.forEach((m) => {
-      var marker = new AMap.Marker({
-        position: new AMap.LngLat(m.lng, m.lat), // 缁忕含搴﹀璞★紝涔熷彲浠ユ槸缁忕含搴︽瀯鎴愮殑涓�缁存暟缁刐116.39, 39.9]
+      let name = m.name;
+      if (m.name.length > 9) {
+        const i = m.name.length / 2;
+        const str1 = m.name.slice(0, i + 1);
+        const str2 = m.name.slice(i + 1, m.name.length);
+        name = `${str1}<br />${str2}`;
+      }
+      var marker = new AMap.ElasticMarker({
         title: m.name,
-        offset: new AMap.Pixel(-13, -12),
-        // anchor: 'center',
-        icon: new AMap.Icon({
-          image: './asset/mipmap/c_level_no.png',
-          // imageSize: [12, 12],
-        }),
+        zoom: [14, 20],
+        position: new AMap.LngLat(m.lng, m.lat),
+        styles: [
+          {
+            icon: {
+              img: './asset/mipmap/scene.png',
+              size: [16, 16], //鍙鍖哄煙鐨勫ぇ灏�
+              ancher: [8, 16], //閿氱偣
+              fitZoom: 14, //鏈�鍚堥�傜殑绾у埆
+              scaleFactor: 1.4, //鍦板浘鏀惧ぇ涓�绾х殑缂╂斁姣斾緥绯绘暟
+              maxScale: 2, //鏈�澶ф斁澶ф瘮渚�
+              minScale: 1, //鏈�灏忔斁澶ф瘮渚�
+            },
+            label: {
+              content: `<div>${name}</div>`,
+              offset: [-35, 0],
+              position: 'BM',
+              minZoom: 15,
+            },
+          },
+        ],
+        zoomStyleMapping: zoomStyleMapping,
       });
       mList.push(marker);
     });
@@ -180,14 +211,14 @@
 
     // 鍒涘缓鏍峰紡瀵硅薄
     var styleObject = {
-      url: 'https://a.amap.com/jsapi_demos/static/images/mass0.png',
+      url: 'https://a.amap.com/jsapi_demos/static/images/mass1.png',
       // url: './asset/mipmap/ic_up_white.png', // 鍥炬爣鍦板潃
       size: new AMap.Size(11, 11), // 鍥炬爣澶у皬
       anchor: new AMap.Pixel(5, 5), // 鍥炬爣鏄剧ず浣嶇疆鍋忕Щ閲忥紝鍩哄噯鐐逛负鍥炬爣宸︿笂瑙�
     };
     var massMarks = new AMap.MassMarks(data, {
       zIndex: 5, // 娴烽噺鐐瑰浘灞傚彔鍔犵殑椤哄簭
-      zooms: [3, 18], // 鍦ㄦ寚瀹氬湴鍥剧缉鏀剧骇鍒寖鍥村唴灞曠ず娴烽噺鐐瑰浘灞�
+      zooms: [15, 18], // 鍦ㄦ寚瀹氬湴鍥剧缉鏀剧骇鍒寖鍥村唴灞曠ず娴烽噺鐐瑰浘灞�
       style: styleObject, // 璁剧疆鏍峰紡瀵硅薄
     });
     massMarks.on('click', (event) => {
@@ -207,11 +238,10 @@
       this.drawSector3(lnglats[i], windDir, windSpeed);
 
       // 2. 缁樺埗瀵硅瘽妗�
-      const window = DialogUtil.createInfoWindow(fDatas, i, () => {
+      DialogUtil.openNewWindow(fDatas, i, MapUtil._map, lnglats[i], () => {
         // 绉婚櫎鎵囧舰鍖哄煙
-        this.clearSector3();
+        // this.clearSector3();
       });
-      window.open(MapUtil._map, lnglats[i]);
 
       // 3. 瓒嬪娍鍥捐烦杞畾浣�
       const progress = FChart.locate(
@@ -289,10 +319,11 @@
   _sector: undefined,
   _sectorViews3: {},
   drawSector3: function (lnglat, windDir, windSpeed) {
-    // this._map.remove(MapUtil._sectorViews)
-    // MapUtil._sectorViews = []
     if (windSpeed > 10) {
       return;
+    }
+    if (MapUtil._sectorViews3['text10'] != undefined) {
+      this.clearSector3();
     }
 
     var sector = new AMap.Object3D.Mesh();
@@ -364,89 +395,129 @@
       geometry.faces.push(index + 3, index + 4, index + 5);
       geometry.faces.push(index + 4, index + 5, index + 6);
     }
-
-    if (this._sector != undefined) {
-      this._object3Dlayer.remove(this._sector);
-    }
     this._object3Dlayer.add(sector);
     this._sector = sector;
 
     distance = distance.toFixed(0);
     distance2 = distance2.toFixed(0);
+    const zoomStyleMapping = {
+      14: 0,
+      15: 0,
+      16: 0,
+      17: 0,
+      18: 0,
+      19: 0,
+      20: 0,
+    };
     //10鍒嗛挓鎵囧舰
-    if (MapUtil._sectorViews3['text10'] == undefined) {
-      var text15 = new AMap.Text({
-        text: '10鍒嗛挓',
-        position: list[2],
-        // animation: "AMAP_ANIMATION_DROP"
-      });
-      MapUtil._sectorViews3['text10'] = text15;
-      var textM = new AMap.Text({
-        text: distance + 'm',
-        position: list[1],
-        // animation: "AMAP_ANIMATION_DROP"
-      });
-      MapUtil._sectorViews3['textM'] = textM;
-    } else {
-      MapUtil._sectorViews3['text10'].setPosition(list[2]);
-      MapUtil._sectorViews3['textM'].setPosition(list[1]);
-      MapUtil._sectorViews3['textM'].setText(distance + 'm');
-    }
+    var text15 = new AMap.ElasticMarker({
+      zoom: [14, 20],
+      position: list[2],
+      styles: [
+        {
+          icon: {
+            img: './asset/mipmap/location.png',
+            size: [16, 16], //鍙鍖哄煙鐨勫ぇ灏�
+            ancher: [8, 16], //閿氱偣
+            fitZoom: 18, //鏈�鍚堥�傜殑绾у埆
+            scaleFactor: 1, //鍦板浘鏀惧ぇ涓�绾х殑缂╂斁姣斾緥绯绘暟
+            maxScale: 2, //鏈�澶ф斁澶ф瘮渚�
+            minScale: 1, //鏈�灏忔斁澶ф瘮渚�
+          },
+          label: {
+            content: '<div>10鍒嗛挓</div>',
+            offset: [-35, 0],
+            position: 'BM',
+            minZoom: 15,
+          },
+        },
+      ],
+      zoomStyleMapping: zoomStyleMapping,
+    });
+    MapUtil._sectorViews3['text10'] = text15;
+    var textM = new AMap.ElasticMarker({
+      zoom: [14, 20],
+      position: list[1],
+      styles: [
+        {
+          icon: {
+            img: './asset/mipmap/location.png',
+            size: [16, 16], //鍙鍖哄煙鐨勫ぇ灏�
+            ancher: [8, 16], //閿氱偣
+            fitZoom: 18, //鏈�鍚堥�傜殑绾у埆
+            scaleFactor: 1, //鍦板浘鏀惧ぇ涓�绾х殑缂╂斁姣斾緥绯绘暟
+            maxScale: 2, //鏈�澶ф斁澶ф瘮渚�
+            minScale: 1, //鏈�灏忔斁澶ф瘮渚�
+          },
+          label: {
+            content: `<div>${distance}m</div>`,
+            offset: [-35, 0],
+            position: 'BM',
+            minZoom: 15,
+          },
+        },
+      ],
+      zoomStyleMapping: zoomStyleMapping,
+    });
+    MapUtil._sectorViews3['textM'] = textM;
     MapUtil._map.add(MapUtil._sectorViews3['text10']);
     MapUtil._map.add(MapUtil._sectorViews3['textM']);
 
-    // 缂╂斁鍦板浘鍒板悎閫傜殑瑙嗛噹绾у埆
-    // if (animation != false) {
-    //     MapUtil._map.setFitView([bezierCurve, line1, line2])
-    // }
-
     //5鍒嗛挓鎵囧舰
-
     pList = list2;
-    // MapUtil._map.setCenter(pList[0])
     path = [
       [pList[0].lng, pList[0].lat],
       [pList[1].lng, pList[1].lat, pList[2].lng, pList[2].lat],
     ];
 
-    if (MapUtil._sectorViews3['textM5'] == undefined) {
-      var bezierCurve = new AMap.BezierCurve({
-        path: path,
-        // isOutline: true,
-        // outlineColor: '#ffeeff',
-        borderWeight: 1,
-        strokeColor: '#ffeeff',
-        strokeOpacity: 1,
-        // strokeWeight: 6,
-        // 绾挎牱寮忚繕鏀寔 'dashed'
-        strokeStyle: 'solid',
-        // strokeStyle鏄痙ashed鏃舵湁鏁�
-        strokeDasharray: [10, 10],
-        lineJoin: 'round',
-        lineCap: 'round',
-        zIndex: 50,
-      });
-      // bezierCurve.setMap(MapUtil._map)
-      // MapUtil._sectorViews3['bezierCurve'] = bezierCurve
-
-      var text5 = new AMap.Text({
-        text: '5鍒嗛挓',
-        position: pList[1],
-        // animation: "AMAP_ANIMATION_DROP"
-      });
-      MapUtil._sectorViews3['text5'] = text5;
-      var textM5 = new AMap.Text({
-        text: distance2 + 'm',
-        position: pList[0],
-        // animation: "AMAP_ANIMATION_DROP"
-      });
-      MapUtil._sectorViews3['textM5'] = textM5;
-    } else {
-      // MapUtil._sectorViews3['bezierCurve'].setPath(path)
-      MapUtil._sectorViews3['text5'].setPosition(pList[1]);
-      MapUtil._sectorViews3['textM5'].setPosition(pList[0]);
-      MapUtil._sectorViews3['textM5'].setText(distance2 + 'm');
-    }
+    var text5 = new AMap.ElasticMarker({
+      position: pList[1],
+      styles: [
+        {
+          icon: {
+            img: './asset/mipmap/location.png',
+            size: [16, 16], //鍙鍖哄煙鐨勫ぇ灏�
+            ancher: [8, 16], //閿氱偣
+            fitZoom: 18, //鏈�鍚堥�傜殑绾у埆
+            scaleFactor: 1, //鍦板浘鏀惧ぇ涓�绾х殑缂╂斁姣斾緥绯绘暟
+            maxScale: 2, //鏈�澶ф斁澶ф瘮渚�
+            minScale: 1, //鏈�灏忔斁澶ф瘮渚�
+          },
+          label: {
+            content: `<div>5鍒嗛挓</div>`,
+            offset: [-35, 0],
+            position: 'BM',
+            minZoom: 15,
+          },
+        },
+      ],
+      zoomStyleMapping: zoomStyleMapping,
+    });
+    MapUtil._sectorViews3['text5'] = text5;
+    var textM5 = new AMap.ElasticMarker({
+      position: pList[0],
+      styles: [
+        {
+          icon: {
+            img: './asset/mipmap/location.png',
+            size: [16, 16], //鍙鍖哄煙鐨勫ぇ灏�
+            ancher: [8, 16], //閿氱偣
+            fitZoom: 18, //鏈�鍚堥�傜殑绾у埆
+            scaleFactor: 1, //鍦板浘鏀惧ぇ涓�绾х殑缂╂斁姣斾緥绯绘暟
+            maxScale: 2, //鏈�澶ф斁澶ф瘮渚�
+            minScale: 1, //鏈�灏忔斁澶ф瘮渚�
+          },
+          label: {
+            content: `<div>${distance2}m</div>`,
+            offset: [-35, 0],
+            position: 'BM',
+            minZoom: 15,
+          },
+        },
+      ],
+      zoomStyleMapping: zoomStyleMapping,
+    });
+    MapUtil._sectorViews3['textM5'] = textM5;
     MapUtil._map.add(MapUtil._sectorViews3['textM5']);
     MapUtil._map.add(MapUtil._sectorViews3['text5']);
 

--
Gitblit v1.9.3