From b5dad5bca39b68fdaaaf844e38fcc55e94bb34f1 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期五, 14 四月 2023 15:23:50 +0800 Subject: [PATCH] 地图处于其他楼层时无法显示提升机口站点问题 --- src/main/java/com/zy/common/utils/NavigateUtils.java | 51 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java index 7a592cb..ea1a70e 100644 --- a/src/main/java/com/zy/common/utils/NavigateUtils.java +++ b/src/main/java/com/zy/common/utils/NavigateUtils.java @@ -1,6 +1,9 @@ package com.zy.common.utils; +import com.alibaba.fastjson.JSONObject; +import com.zy.asrs.utils.Utils; import com.zy.common.model.NavigateNode; +import com.zy.core.enums.ShuttleTaskModeType; import java.util.*; @@ -9,10 +12,13 @@ */ public class NavigateUtils { - public static List<NavigateNode> calc(String startPoint, String endPoint, String mapType) { + public static List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType) { //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍� int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐� int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣 + + //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑 + int lev = Utils.getLev(startPoint); //鍒濆鍖栧紑濮嬭妭鐐� NavigateNode start = new NavigateNode(startArr[0], startArr[1]); @@ -33,6 +39,7 @@ while (res_node != null) { res_node.setDirection(null); res_node.setIsInflectionPoint(false); + res_node.setZ(lev);//璁剧疆灞傞珮 //瀵绘壘鎷愮偣 HashMap<String, Object> result = searchInflectionPoint(res_node, fatherNode, res_node.getFather());//鍒嗗埆浼犲叆褰撳墠鑺傜偣銆佺埗鑺傜偣銆佷笅涓�鑺傜偣 @@ -127,7 +134,9 @@ ArrayList<ArrayList<NavigateNode>> list = new ArrayList<>(); ArrayList<NavigateNode> data = new ArrayList<>(); String direction = mapList.get(0).getDirection();//琛岃蛋鏂瑰悜 - for (NavigateNode mapNode : mapList) { + + for (int i = 0; i < mapList.size(); i++) { + NavigateNode mapNode = mapList.get(i); boolean isInflectionPoint = mapNode.getIsInflectionPoint(); data.add(mapNode); if (isInflectionPoint) { @@ -136,10 +145,13 @@ list.add(data);//娣诲姞鏌愪竴娈垫暟鎹� direction = mapNode.getDirection();//鏇存柊琛岃蛋鏂瑰悜 data = new ArrayList<>(); + data.add(mapNode);//灏嗘嫄鐐圭殑缁堢偣锛屾洿鏂版垚涓嬩竴娈靛懡浠ょ殑璧风偣鍧愭爣 }else { //鐩磋绾胯矾 mapNode.setDirection(direction);//璁剧疆琛岃蛋鏂瑰悜 } + Integer distance = getXToNextDistance(mapNode);//鑾峰彇褰撳墠鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈 + mapNode.setMoveDistance(distance); } //灏嗘渶鍚庝竴娈垫暟鎹坊鍔犺繘鍏� @@ -148,15 +160,48 @@ return list; } + //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈 + public static Integer getXToNextDistance(NavigateNode xNode) { + NavigateMapData mapData = new NavigateMapData(); + ArrayList<ArrayList<JSONObject>> lists = mapData.getJsonData(1); + if (lists != null) { + JSONObject jsonObject = lists.get(xNode.getX()).get(xNode.getY()); + if (jsonObject != null) { + return Integer.parseInt(jsonObject.getOrDefault(xNode.getDirection(), 0).toString()); + } + return 0; + } + return 0; + } + + /** + * 鑾峰彇褰撳墠璺緞鎬昏璧拌窛绂� + */ + public static Integer getCurrentPathAllDistance(List<NavigateNode> path) { + if (path.size() == 1) { + //璺緞鍙湁涓�鏉℃暟鎹紝鍒欑洿鎺ヨ繑鍥炶璧拌窛绂� + return path.get(0).getMoveDistance(); + } + + //鎬昏窛绂� + int allDistance = 0; + for (int i = 0; i < path.size() - 1; i++) {//璺緞涓渶鍚庝竴涓妭鐐逛笉缁熻鍒版�昏窛绂伙紝鏈�鍚庝竴涓妭鐐瑰苟涓嶄細鍐嶈璧� + allDistance += path.get(i).getMoveDistance(); + } + return allDistance; + } + public static void main(String[] args) { //璁$畻璺緞 - List<NavigateNode> calc = calc("1000901", "0201801", "out"); + List<NavigateNode> calc = calc("1000901", "1800201", ShuttleTaskModeType.PAK_OUT.id); System.out.println(calc); System.out.println("------------------------"); // List<NavigateNode> calc = calc("0501401", "0201801", "out"); //灏嗚矾寰勫垎鍓叉垚澶氭 ArrayList<ArrayList<NavigateNode>> data = getSectionPath(calc); for (ArrayList<NavigateNode> list : data) { + Integer currentPathAllDistance = getCurrentPathAllDistance(list);//璁$畻褰撳墠璺緞鎬昏窛绂� + System.out.println(currentPathAllDistance); System.out.println(list); } -- Gitblit v1.9.1