From 6b7d9d7cff3704e048ee09b32f49d3d6a2358847 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期五, 27 三月 2026 16:36:54 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/utils/MapMatchingUtil.java |  245 +++++++++++++++++++++++++-----------------------
 1 files changed, 128 insertions(+), 117 deletions(-)

diff --git a/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/utils/MapMatchingUtil.java b/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/utils/MapMatchingUtil.java
index febfded..7bddf2b 100644
--- a/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/utils/MapMatchingUtil.java
+++ b/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/utils/MapMatchingUtil.java
@@ -10,9 +10,7 @@
 import org.gavaghan.geodesy.GeodeticCurve;
 import org.gavaghan.geodesy.GlobalCoordinates;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.*;
 
 
@@ -29,8 +27,9 @@
      * @param latitude
      * @return
      */
-    public static List<LonLatDto> getRemainingNavigation(List<LonLatDto> polyline, Double longitude, Double latitude){
+    public static Map<String, List<LonLatDto>> getRemainingNavigation(List<LonLatDto> polyline, Double longitude, Double latitude){
         //导航数据只有一个点的情况
+        Map<String, List<LonLatDto>> map = new HashMap<>();
         if(polyline.size() == 1){
             LonLatDto lonLatDto = polyline.get(0);
             GlobalCoordinates source1 = new GlobalCoordinates(lonLatDto.getLatitude(), lonLatDto.getLongitude());
@@ -39,12 +38,16 @@
             double distance =geoCurve1.getEllipsoidalDistance();
             //判断距离小于5米,则可以返回空数据
             if(5 >= distance){
-                return Collections.emptyList();
+                map.put("unserved", Collections.emptyList());
+                map.put("served", Collections.emptyList());
+                return map;
             }
             //大于5米的情况,将车子当前位置添加进结果中
             lonLatDto = new LonLatDto(longitude, latitude);
             polyline.add(0, lonLatDto);
-            return polyline;
+            map.put("unserved", polyline);
+            map.put("served", Collections.emptyList());
+            return map;
         }
         //多个点位的情况,需要找出当前点位处于那两个点位之间,然后截取掉超出的部分轨迹
         return getRecentlyPoint(polyline, longitude, latitude);
@@ -59,7 +62,8 @@
      * @param latitude
      * @return
      */
-    public static List<LonLatDto> getRecentlyPoint(List<LonLatDto> polyline, Double longitude, Double latitude){
+    public static Map<String, List<LonLatDto>> getRecentlyPoint(List<LonLatDto> polyline, Double longitude, Double latitude){
+        Map<String, List<LonLatDto>> map = new HashMap<>();
         for (int i = 0; i < polyline.size(); i++) {
             LonLatDto lonLatDto1 = polyline.get(i);
 
@@ -82,124 +86,131 @@
 
             //判断当前位置是否处于两个点位之间
             if((distance1 + distance2) == distance3 || (distance1 + distance2) <= distance3 + 5){
+                //剩余未服务的点位
                 List<LonLatDto> lonLatDtos = polyline.subList(i + 1, polyline.size());
                 lonLatDtos.add(0, new LonLatDto(longitude, latitude));
-                return lonLatDtos;
+                //已经服务的点位,给到前端处理
+                List<LonLatDto> lonLatDtos1 = polyline.subList(0, i + 1);
+                map.put("unserved", lonLatDtos);
+                map.put("served", lonLatDtos1);
+                return map;
             }
         }
         polyline.add(0, new LonLatDto(longitude, latitude));
-        return polyline;
+        map.put("unserved", polyline);
+        map.put("served", Collections.emptyList());
+        return map;
     }
 
 
-    public static void main(String[] args) {
-        JSONArray objects = JSON.parseArray("[{\n" +
-                "\t\t\"latitude\": 30.58549,\n" +
-                "\t\t\"longitude\": 104.054501\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.585938,\n" +
-                "\t\t\"longitude\": 104.054501\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.586522,\n" +
-                "\t\t\"longitude\": 104.054501\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.587026,\n" +
-                "\t\t\"longitude\": 104.054507\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.587922,\n" +
-                "\t\t\"longitude\": 104.054518\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.588062,\n" +
-                "\t\t\"longitude\": 104.054518\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.588292,\n" +
-                "\t\t\"longitude\": 104.054528\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.588292,\n" +
-                "\t\t\"longitude\": 104.0544\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.588292,\n" +
-                "\t\t\"longitude\": 104.0544\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.587949,\n" +
-                "\t\t\"longitude\": 104.054384\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.587311,\n" +
-                "\t\t\"longitude\": 104.054389\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.587118,\n" +
-                "\t\t\"longitude\": 104.054394\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.586704,\n" +
-                "\t\t\"longitude\": 104.054394\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.586125,\n" +
-                "\t\t\"longitude\": 104.0544\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.585938,\n" +
-                "\t\t\"longitude\": 104.054405\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.585476,\n" +
-                "\t\t\"longitude\": 104.054405\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.584693,\n" +
-                "\t\t\"longitude\": 104.054405\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.584403,\n" +
-                "\t\t\"longitude\": 104.054416\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.584312,\n" +
-                "\t\t\"longitude\": 104.054416\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.583593,\n" +
-                "\t\t\"longitude\": 104.054416\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.583486,\n" +
-                "\t\t\"longitude\": 104.054416\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.583116,\n" +
-                "\t\t\"longitude\": 104.054421\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.582391,\n" +
-                "\t\t\"longitude\": 104.054426\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.582397,\n" +
-                "\t\t\"longitude\": 104.054577\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.582397,\n" +
-                "\t\t\"longitude\": 104.054577\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.582815,\n" +
-                "\t\t\"longitude\": 104.054561\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.58311,\n" +
-                "\t\t\"longitude\": 104.05455\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.58311,\n" +
-                "\t\t\"longitude\": 104.05455\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.58311,\n" +
-                "\t\t\"longitude\": 104.054899\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.583143,\n" +
-                "\t\t\"longitude\": 104.054931\n" +
-                "\t}, {\n" +
-                "\t\t\"latitude\": 30.583148,\n" +
-                "\t\t\"longitude\": 104.054973\n" +
-                "\t}]");
-        List<LonLatDto> lonLatDtoList = new ArrayList<>();
-        for (int i = 0; i < objects.size(); i++) {
-            JSONObject object = objects.getJSONObject(i);
-            LonLatDto lonLatDto = new LonLatDto(object.getDouble("longitude"), object.getDouble("latitude"));
-            lonLatDtoList.add(lonLatDto);
-        }
-        for (int i = 0; i < 20; i++) {
-            List<LonLatDto> remainingNavigation = getRemainingNavigation(lonLatDtoList, 104.054503, 30.58549);
-            lonLatDtoList = remainingNavigation;
-        }
-
-
-    }
+//    public static void main(String[] args) {
+//        JSONArray objects = JSON.parseArray("[{\n" +
+//                "\t\t\"latitude\": 30.58549,\n" +
+//                "\t\t\"longitude\": 104.054501\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.585938,\n" +
+//                "\t\t\"longitude\": 104.054501\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.586522,\n" +
+//                "\t\t\"longitude\": 104.054501\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.587026,\n" +
+//                "\t\t\"longitude\": 104.054507\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.587922,\n" +
+//                "\t\t\"longitude\": 104.054518\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.588062,\n" +
+//                "\t\t\"longitude\": 104.054518\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.588292,\n" +
+//                "\t\t\"longitude\": 104.054528\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.588292,\n" +
+//                "\t\t\"longitude\": 104.0544\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.588292,\n" +
+//                "\t\t\"longitude\": 104.0544\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.587949,\n" +
+//                "\t\t\"longitude\": 104.054384\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.587311,\n" +
+//                "\t\t\"longitude\": 104.054389\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.587118,\n" +
+//                "\t\t\"longitude\": 104.054394\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.586704,\n" +
+//                "\t\t\"longitude\": 104.054394\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.586125,\n" +
+//                "\t\t\"longitude\": 104.0544\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.585938,\n" +
+//                "\t\t\"longitude\": 104.054405\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.585476,\n" +
+//                "\t\t\"longitude\": 104.054405\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.584693,\n" +
+//                "\t\t\"longitude\": 104.054405\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.584403,\n" +
+//                "\t\t\"longitude\": 104.054416\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.584312,\n" +
+//                "\t\t\"longitude\": 104.054416\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.583593,\n" +
+//                "\t\t\"longitude\": 104.054416\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.583486,\n" +
+//                "\t\t\"longitude\": 104.054416\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.583116,\n" +
+//                "\t\t\"longitude\": 104.054421\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.582391,\n" +
+//                "\t\t\"longitude\": 104.054426\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.582397,\n" +
+//                "\t\t\"longitude\": 104.054577\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.582397,\n" +
+//                "\t\t\"longitude\": 104.054577\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.582815,\n" +
+//                "\t\t\"longitude\": 104.054561\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.58311,\n" +
+//                "\t\t\"longitude\": 104.05455\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.58311,\n" +
+//                "\t\t\"longitude\": 104.05455\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.58311,\n" +
+//                "\t\t\"longitude\": 104.054899\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.583143,\n" +
+//                "\t\t\"longitude\": 104.054931\n" +
+//                "\t}, {\n" +
+//                "\t\t\"latitude\": 30.583148,\n" +
+//                "\t\t\"longitude\": 104.054973\n" +
+//                "\t}]");
+//        List<LonLatDto> lonLatDtoList = new ArrayList<>();
+//        for (int i = 0; i < objects.size(); i++) {
+//            JSONObject object = objects.getJSONObject(i);
+//            LonLatDto lonLatDto = new LonLatDto(object.getDouble("longitude"), object.getDouble("latitude"));
+//            lonLatDtoList.add(lonLatDto);
+//        }
+//        for (int i = 0; i < 20; i++) {
+//            List<LonLatDto> remainingNavigation = getRemainingNavigation(lonLatDtoList, 104.054503, 30.58549);
+//            lonLatDtoList = remainingNavigation;
+//        }
+//
+//
+//    }
 
 
     /**

--
Gitblit v1.7.1