From 81d537833adcbd5ef5333453e495eae2cac9f496 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期一, 21 七月 2025 15:01:51 +0800 Subject: [PATCH] # --- src/main/java/com/zy/common/utils/NavigateUtils.java | 74 ++++++++++++++++++++++++++++-------- 1 files changed, 57 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java index db95875..c6e94ab 100644 --- a/src/main/java/com/zy/common/utils/NavigateUtils.java +++ b/src/main/java/com/zy/common/utils/NavigateUtils.java @@ -189,7 +189,7 @@ } //璁$畻甯︽湯绔钀借矾寰� - public ArrayList<ArrayList<NavigateNode>> calcEndPath(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) { + public List<List<NavigateNode>> calcEndPath(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) { //璁$畻璺緞 List<NavigateNode> navigateNodes = calc(startPoint, endPoint, mapTypes, shuttlePoints, whites); if (navigateNodes == null) { @@ -198,7 +198,7 @@ } //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> partList = this.getSectionPath(navigateNodes); + List<List<NavigateNode>> partList = this.getSectionPath(navigateNodes); //鏍规嵁浼犲叆鐨勬湯绔钀借矾寰勶紝鎵惧埌鏈鐐逛綅 int partResult = partList.size() - lastPathPart; if (partResult == 0) {//璺緞鏁伴噺鐩稿悓鏃犻渶鍒嗗壊 @@ -207,7 +207,7 @@ throw new CoolException("鍒嗘璺緞涓庢湯绔矾寰勬暟閲忚绠楀紓甯�"); } int pathIdx = partResult - 1; - ArrayList<ArrayList<NavigateNode>> filterList = new ArrayList<>(); + List<List<NavigateNode>> filterList = new ArrayList<>(); for (int i = 0; i <= pathIdx; i++) { filterList.add(partList.get(i)); } @@ -216,7 +216,7 @@ //璁$畻鏈娈佃惤鍦板潃 public String calcEndLocation(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) { - ArrayList<ArrayList<NavigateNode>> endPath = calcEndPath(startPoint, endPoint, mapTypes, shuttlePoints, whites, lastPathPart); + List<List<NavigateNode>> endPath = calcEndPath(startPoint, endPoint, mapTypes, shuttlePoints, whites, lastPathPart); if (endPath == null) { return null; } @@ -224,13 +224,8 @@ return findTargetLocation(endPath); } - public String findTargetLocation(List<NavigateNode> nodeList) { - ArrayList<ArrayList<NavigateNode>> sectionPath = this.getSectionPath(nodeList); - return findTargetLocation(sectionPath); - } - - public String findTargetLocation(ArrayList<ArrayList<NavigateNode>> partList) { - ArrayList<NavigateNode> nodes = partList.get(partList.size() - 1); + public String findTargetLocation(List<List<NavigateNode>> partList) { + List<NavigateNode> nodes = partList.get(partList.size() - 1); NavigateNode targetNode = nodes.get(0); String locNo = NavigatePositionConvert.nodeToLocNo(targetNode); return locNo; @@ -292,10 +287,10 @@ * 鍔犺浆寮妭鐐� * 鑾峰彇鍒嗘璺緞锛屾瘡褰撴湁涓�涓嫄鐐瑰垯杩涜涓�娆″垎娈碉紝鏈�缁堣繑鍥炴�诲垎娈垫暟鎹� */ - public ArrayList<ArrayList<NavigateNode>> getSectionPath(List<NavigateNode> mapList) { - ArrayList<ArrayList<NavigateNode>> list = new ArrayList<>(); + public List<List<NavigateNode>> getSectionPath(List<NavigateNode> mapList) { + List<List<NavigateNode>> list = new ArrayList<>(); - ArrayList<NavigateNode> data = new ArrayList<>(); + List<NavigateNode> data = new ArrayList<>(); String direction = mapList.get(0).getDirection();//琛岃蛋鏂瑰悜 for (NavigateNode navigateNode : mapList) { @@ -318,7 +313,52 @@ //灏嗘渶鍚庝竴娈垫暟鎹坊鍔犺繘鍏� list.add(data); - return list; + List<List<NavigateNode>> paths = getSectionPathToSplitOverLength(list); + return paths; + } + + //鍒嗘璺緞-澶勭悊瓒呴暱鐩寸嚎娈佃矾寰� + public List<List<NavigateNode>> getSectionPathToSplitOverLength(List<List<NavigateNode>> list) { + List<List<NavigateNode>> paths = new ArrayList<>(); + int overLength = 9; + for (List<NavigateNode> nodes : list) { + if (nodes.size() > overLength) { + List<NavigateNode> copy = JSON.parseArray(JSON.toJSONString(nodes), NavigateNode.class); + List<NavigateNode> tmp = new ArrayList<>(); + int tmpCount = 0; + NavigateNode lastNode = null; + for (NavigateNode node : copy) { + tmp.add(node); + tmpCount++; + + if(tmpCount >= overLength) { + if (lastNode == null) { + NavigateNode startNode = tmp.get(0); + startNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧� + tmp.set(0, startNode); + } + NavigateNode targetNode = tmp.get(tmp.size() - 1); + targetNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧� + if (lastNode != null) { + tmp.add(0, lastNode); + } + + paths.add(tmp); + tmp = new ArrayList<>(); + tmpCount = 0; + lastNode = targetNode; + } + } + + if (tmpCount > 0) { + tmp.add(0, lastNode); + paths.add(tmp); + } + }else { + paths.add(nodes); + } + } + return paths; } //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈 @@ -348,9 +388,9 @@ * 鏍规嵁鍘熷鑺傜偣缁撴灉锛岃绠楁�昏璧拌窛绂� */ public Integer getOriginPathAllDistance(List<NavigateNode> path) { - ArrayList<ArrayList<NavigateNode>> sectionPath = getSectionPath(path); + List<List<NavigateNode>> sectionPath = getSectionPath(path); Integer allDistance = 0; - for (ArrayList<NavigateNode> navigateNodes : sectionPath) { + for (List<NavigateNode> navigateNodes : sectionPath) { Integer distance = getCurrentPathAllDistance(navigateNodes); allDistance += distance; } -- Gitblit v1.9.1