From 7578c3ff65329b2269f099475eb687e963efac1c Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期二, 27 二月 2024 17:13:29 +0800
Subject: [PATCH] 地图3D模型、折线图和表格三者点击联动效果

---
 lib/map.js |  202 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 198 insertions(+), 4 deletions(-)

diff --git a/lib/map.js b/lib/map.js
index e4a9a35..a643493 100644
--- a/lib/map.js
+++ b/lib/map.js
@@ -322,7 +322,7 @@
     if (windSpeed > 10) {
       return;
     }
-    if (MapUtil._sectorViews3['text10'] != undefined) {
+    if (this._sector != undefined) {
       this.clearSector3();
     }
 
@@ -525,13 +525,207 @@
     SceneUtil.searchByCoordinate(lnglat[0], lnglat[1], distance);
   },
 
+  drawSector4: function (lnglat, windDir, windSpeed) {
+    if (windSpeed > 10) {
+      return;
+    }
+
+    var sector = new AMap.Object3D.Mesh();
+    sector.transparent = true;
+    sector.backOrFront = 'both';
+
+    var unit = 5;
+
+    var sDeg = windDir - this._defaultDeg; //鎵囧舰璧峰瑙掑害锛堜互涓婃柟浣滀负0搴︼級
+    var eDeg = windDir + this._defaultDeg; //鎵囧舰缁撴潫瑙掑害
+
+    var distance = windSpeed * 10 * 60; //鍗婂緞(椋庨��*鏃堕棿)
+    var lnglat2 = this._getLatLon(lnglat, distance, sDeg);
+    var lnglat3 = this._getLatLon(lnglat, distance, windDir);
+    var lnglat4 = this._getLatLon(lnglat, distance, eDeg);
+    var list = this.parse2LngLat([lnglat, lnglat2, lnglat3, lnglat4]);
+
+    var distance2 = windSpeed * 5 * 60; //鍗婂緞(椋庨��*鏃堕棿)
+    var lnglat2_2 = this._getLatLon(lnglat, distance2, sDeg);
+    var lnglat2_3 = this._getLatLon(lnglat, distance2, windDir);
+    var lnglat2_4 = this._getLatLon(lnglat, distance2, eDeg);
+    var list2 = this.parse2LngLat([lnglat2_2, lnglat2_3, lnglat2_4]);
+
+    var p0 = this.lngLatToGeodeticCoord([lnglat])[0];
+    var geometry = sector.geometry;
+
+    var count = distance / unit;
+    var unitDeg = (eDeg - sDeg) / count;
+    for (let i = 0; i < count; i++) {
+      var angle1 = sDeg + unitDeg * i;
+      var angle2 = sDeg + unitDeg * (i + 1);
+
+      var l1 = this._getLatLon(lnglat, distance, angle1);
+      var l2 = this._getLatLon(lnglat, distance, angle2);
+      var l3 = this._getLatLon(lnglat, distance2, angle1);
+      var l4 = this._getLatLon(lnglat, distance2, angle2);
+
+      var coors = this.lngLatToGeodeticCoord([l1, l2, l3, l4]);
+      l1 = coors[0];
+      l2 = coors[1];
+      l3 = coors[2];
+      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);
+
+      // 鍐呮祴鎵囧舰棰滆壊
+      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 (this._sector != undefined) {
+      this._object3Dlayer.remove(this._sector);
+    }
+    this._object3Dlayer.add(sector);
+    this._sector = sector;
+
+    distance = distance.toFixed(0);
+    distance2 = distance2.toFixed(0);
+    //10鍒嗛挓鎵囧舰
+    if (MapUtil._sectorViews3['text10-a'] == undefined) {
+      var text15 = new AMap.Text({
+        text: '10鍒嗛挓',
+        position: list[2],
+        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',
+        },
+      });
+      MapUtil._map.add(text15);
+      MapUtil._sectorViews3['text10-a'] = text15;
+      var textM = new AMap.Text({
+        text: distance + 'm',
+        position: list[1],
+        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',
+        },
+      });
+      MapUtil._map.add(textM);
+      MapUtil._sectorViews3['text10M-a'] = textM;
+    } else {
+      MapUtil._sectorViews3['text10-a'].setPosition(list[2]);
+      MapUtil._sectorViews3['text10M-a'].setPosition(list[1]);
+      MapUtil._sectorViews3['text10M-a'].setText(distance + 'm');
+    }
+
+    //5鍒嗛挓鎵囧舰
+    pList = list2;
+    path = [
+      [pList[0].lng, pList[0].lat],
+      [pList[1].lng, pList[1].lat, pList[2].lng, pList[2].lat],
+    ];
+
+    if (MapUtil._sectorViews3['textM5-a'] == 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],
+        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',
+        },
+        // animation: "AMAP_ANIMATION_DROP"
+      });
+      MapUtil._map.add(text5);
+      MapUtil._sectorViews3['text5-a'] = text5;
+      var textM5 = new AMap.Text({
+        text: distance2 + 'm',
+        position: pList[0],
+        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',
+        },
+        // animation: "AMAP_ANIMATION_DROP"
+      });
+      MapUtil._map.add(textM5);
+      MapUtil._sectorViews3['textM5-a'] = textM5;
+    } else {
+      // MapUtil._sectorViews3['bezierCurve'].setPath(path)
+      MapUtil._sectorViews3['text5-a'].setPosition(pList[1]);
+      MapUtil._sectorViews3['textM5-a'].setPosition(pList[0]);
+      MapUtil._sectorViews3['textM5-a'].setText(distance2 + 'm');
+    }
+  },
+
   clearSector3: function () {
     var list = [];
     for (const key in this._sectorViews3) {
       list.push(this._sectorViews3[key]);
     }
-    this.removeViews(list);
-    this._object3Dlayer.remove(this._sector);
+    if (list.length > 0) {
+      this.removeViews(list);
+      this._sectorViews3 = {};
+    }
+    if (this._sector) {
+      this._object3Dlayer.remove(this._sector);
+    }
   },
 
   parse2LngLat: function (lnglats) {
@@ -973,7 +1167,7 @@
    */
   _getScale(minH, maxH) {
     var zoom = MapUtil._map.getZoom();
-    console.log(`zoom: ${zoom}`);
+    // console.log(`zoom: ${zoom}`);
     if (this._lastZoom == -1) {
       this._lastZoom = zoom;
     } else if (this._lastZoom <= 8) {

--
Gitblit v1.9.3