From 2ca520cee7b905dc5ddaef59a04ba1e6881c84e4 Mon Sep 17 00:00:00 2001
From: wanglizhong <wlz>
Date: 星期一, 05 五月 2025 16:06:50 +0800
Subject: [PATCH] fix:优化 map

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java |   13 +++-
 ruoyi-ui/src/views/system/gps/map.vue                                               |   93 ++++++++++++++----------------
 ruoyi-ui/src/api/system/gps.js                                                      |   18 +++++
 3 files changed, 69 insertions(+), 55 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
index f5116b2..998237f 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
@@ -31,11 +31,9 @@
 public class VehicleGpsController extends BaseController {
     @Autowired
     private IVehicleGpsService vehicleGpsService;
-
-    @Anonymous
-    /**
+   /**
      * 鏌ヨ杞﹁締GPS鍧愭爣鍒楄〃
-     */
+     */  
     @PreAuthorize("@ss.hasPermi('system:gps:list')")
     @GetMapping("/list")
     public TableDataInfo list(VehicleGps vehicleGps) {
@@ -43,6 +41,13 @@
         List<VehicleGps> list = vehicleGpsService.selectVehicleGpsList(vehicleGps);
         return getDataTable(list);
     }
+    @Anonymous(needSign=true)   
+    @GetMapping("/anonymousList")
+    public TableDataInfo anonymousList(VehicleGps vehicleGps) {
+        startPage();
+        List<VehicleGps> list = vehicleGpsService.selectVehicleGpsList(vehicleGps);
+        return getDataTable(list);
+    }
 
     /**
      * 瀵煎嚭杞﹁締GPS鍧愭爣鍒楄〃
diff --git a/ruoyi-ui/src/api/system/gps.js b/ruoyi-ui/src/api/system/gps.js
index e57aa18..de8af82 100644
--- a/ruoyi-ui/src/api/system/gps.js
+++ b/ruoyi-ui/src/api/system/gps.js
@@ -5,7 +5,23 @@
   return request({
     url: '/system/gps/list',
     method: 'get',
-    params: query
+    params: {
+      ...query
+    
+    }
+  })
+}
+//anonymousList
+export function anonymousList(query) {
+  return request({
+    url: '/system/gps/anonymousList',
+    method: 'get',
+    params: {
+      ...query,
+      appId: query.appId,
+      sign: query.sign,
+      timestamp: query.timestamp
+    }
   })
 }
 
diff --git a/ruoyi-ui/src/views/system/gps/map.vue b/ruoyi-ui/src/views/system/gps/map.vue
index f96f1a6..a9ee044 100644
--- a/ruoyi-ui/src/views/system/gps/map.vue
+++ b/ruoyi-ui/src/views/system/gps/map.vue
@@ -104,7 +104,7 @@
 </template>
 
 <script>
-import { listGps } from "@/api/system/gps";
+import { anonymousList } from "@/api/system/gps";
 
 export default {
   name: "GpsMap",
@@ -126,9 +126,12 @@
       dateRange: [],
       // 鏌ヨ鍙傛暟
       queryParams: {
-        vehicleNo: undefined,
-        orderByColumn: "collect_time",
-        isAsc: "desc",
+        pageNum: 1,
+        pageSize: 10,
+        deviceId: null,
+        appId: null,
+        sign: null,
+        timestamp: null
       },
       // 鍦板浘瀵硅薄
       map: null,
@@ -156,9 +159,19 @@
     if (query.vehicleNo) {
       this.queryParams.vehicleNo = query.vehicleNo;
     }
+    // 璁剧疆璁よ瘉鍙傛暟
+    if (query.appId) {
+      this.queryParams.appId = query.appId;
+    }
+    if (query.sign) {
+      this.queryParams.sign = query.sign;
+    }
+    if (query.timestamp) {
+      this.queryParams.timestamp = query.timestamp;
+    }
     // 璁剧疆鏃堕棿鑼冨洿
-    if (query.startTime && query.endTime) {
-      this.dateRange = [query.startTime, query.endTime];
+    if (query.beginTime && query.endTime) {
+      this.dateRange = [query.beginTime, query.endTime];
     }
     this.getList();
   },
@@ -166,6 +179,10 @@
     // 鍔ㄦ�佸姞杞界櫨搴﹀湴鍥続PI
     this.loadBMapScript().then(() => {
       this.initMap();
+      window.initMapFlag=true;
+      if(window.loadGpsList){
+        this.drawTrack()
+      }
     });
   },
   methods: {
@@ -205,15 +222,16 @@
     },
     /** 鏌ヨGPS鍒楄〃 */
     getList() {
-      this.loading = true;
-      listGps(this.addDateRange(this.queryParams, this.dateRange)).then(
-        (response) => {
-          this.gpsList = response.rows;
-          this.total = response.total;
-          this.loading = false;
+      this.loading = true;      
+      anonymousList(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+        this.gpsList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+        window.loadGpsList=true;
+        if(window.initMapFlag){
           this.drawTrack();
         }
-      );
+      });
     },
     async translatePoints(points) {
       // 灏哤GS84鍧愭爣杞崲涓虹櫨搴﹀潗鏍�
@@ -246,6 +264,7 @@
       this.map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
       // 鍚敤婊氳疆鏀惧ぇ缂╁皬
       this.map.enableScrollWheelZoom();
+      console.log("initMap 鍒濆鍖栧湴鍥�")
     },
      /** 璁$畻涓ょ偣涔嬮棿鐨勮窛绂伙紙绫筹級 */
      getDistance(point1, point2) {
@@ -258,34 +277,7 @@
         return Math.atan2(dy, dx) * 180 / Math.PI;
       },
 
-     /** 鍦ㄤ袱鐐逛箣闂存彃鍏ュ钩婊戠偣 */
-     getSmoothPoints(point1, point2) {
-        const distance = this.getDistance(point1, point2);
-        if (distance < this.minDistance) {
-          return [point1, point2];
-        }
-        
-        const angle = this.getAngle(point1, point2);
-        const midPoint = new BMap.Point(
-          (point1.lng + point2.lng) / 2,
-          (point1.lat + point2.lat) / 2
-        );
-        
-        // 璁$畻鎺у埗鐐�
-        const controlPoint = new BMap.Point(
-          midPoint.lng + this.smoothFactor * distance * Math.cos((angle + 90) * Math.PI / 180),
-          midPoint.lat + this.smoothFactor * distance * Math.sin((angle + 90) * Math.PI / 180)
-        );
-        
-        // 浣跨敤浜屾璐濆灏旀洸绾跨敓鎴愬钩婊戠偣
-        const points = [];
-        for (let t = 0; t <= 1; t += 0.1) {
-          const x = Math.pow(1 - t, 2) * point1.lng + 2 * (1 - t) * t * controlPoint.lng + Math.pow(t, 2) * point2.lng;
-          const y = Math.pow(1 - t, 2) * point1.lat + 2 * (1 - t) * t * controlPoint.lat + Math.pow(t, 2) * point2.lat;
-          points.push(new BMap.Point(x, y));
-        }
-        return points;
-      },
+   
 
     /** 缁樺埗杞ㄨ抗 */
     async drawTrack() {
@@ -333,11 +325,18 @@
       translatePoints.forEach((item, index) => {
         const bdPoint = item;
 
-        // 鍙湪璧风偣鍜岀粓鐐瑰垱寤烘爣璁�
-        if (index === 0 || index === translatePoints.length - 1) {
+        // 鍒ゆ柇璧风偣鍜岀粓鐐规槸鍚︾浉鍚�
+        const isStartPoint = index === 0;
+        const isEndPoint = index === translatePoints.length - 1;
+        const isStartEndSame = isStartPoint && isEndPoint && 
+          translatePoints[0].lng === translatePoints[translatePoints.length - 1].lng && 
+          translatePoints[0].lat === translatePoints[translatePoints.length - 1].lat;
+
+        // 鍙湪璧风偣鍜岀粓鐐瑰垱寤烘爣璁帮紝涓旇捣鐐瑰拰缁堢偣涓嶅悓鏃舵墠鏄剧ず璧风偣鏍囪
+        if ((isStartPoint && !isStartEndSame) || isEndPoint) {
           let marker;
           let direction=currentSegment[index].direction;
-          if (index === 0) {
+          if (isStartPoint && !isStartEndSame) {
             // 璧风偣鏄剧ず"璧�"瀛�
             const label = new BMap.Label("璧�", {
               offset: new BMap.Size(0, 0),
@@ -410,12 +409,6 @@
           this.map.addOverlay(marker);
           this.markers.push(marker);
         }
-        // const smoothPoints = [];
-        // for (let i = 0; i < points.length - 1; i++) {
-        //   const segmentPoints = this.getSmoothPoints(points[i], points[i + 1]);
-        //   smoothPoints.push(...segmentPoints);
-        // }
-        // smoothPoints.push(points[points.length - 1]);
 
         // 濡傛灉鏄渶鍚庝竴涓偣锛岀粯鍒惰建杩圭嚎
         if (index === currentSegment.length - 1) {

--
Gitblit v1.9.1