From 123a17c9d50745ea609f91943adca64e5ed12355 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期六, 12 四月 2025 09:08:14 +0800
Subject: [PATCH] 1
---
src/main/java/com/zy/common/utils/NavigateUtils.java | 91 +++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 86 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 4e02d8e..cb21ea1 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -10,6 +10,7 @@
import com.zy.core.News;
import com.zy.core.enums.MapNodeType;
import com.zy.core.model.PythonSimilarityResult;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@@ -25,11 +26,16 @@
@Value("${pythonCalcPath}")
private String pythonCalcPath;
-
@Value("${pythonCalcSimilarity}")
private String pythonCalcSimilarity;
+ @Autowired
+ private NavigateMapData navigateMapData;
public List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
+ return calcJava(startPoint, endPoint, mapType, shuttlePoints, whites);
+ }
+
+ public List<NavigateNode> calcJava(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
//閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
@@ -42,17 +48,93 @@
//鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
int lev = Utils.getLev(startPoint);
+ NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+ int[][] map = solution.map;
//鍒濆鍖栧紑濮嬭妭鐐�
NavigateNode start = new NavigateNode(startArr[0], startArr[1]);
//寮�濮嬭妭鐐规棤鐖惰妭鐐�
start.setFather(null);
+ start.setNodeValue(map[startArr[0]][startArr[1]]);
NavigateNode end = new NavigateNode(endArr[0], endArr[1]);
- NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+ end.setNodeValue(map[endArr[0]][endArr[1]]);
//寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
- String pathStr = solution.astarSearch(start, end, pythonCalcPath);
+ NavigateNode res_node = solution.astarSearchJava(start, end);
+ if (res_node == null) {
+ News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
+ return null;
+ }
+
+ ArrayList<NavigateNode> list = new ArrayList<>();
+ //娓叉煋
+ NavigateNode fatherNode = null;//褰撳墠寰幆涓婁竴鑺傜偣锛岀敤浜庢嫄鐐硅绠�
+ 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());//鍒嗗埆浼犲叆褰撳墠鑺傜偣銆佺埗鑺傜偣銆佷笅涓�鑺傜偣
+ //鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘嫄鐐�
+ if (Boolean.parseBoolean(result.get("result").toString())) {
+ //褰撳墠涓烘嫄鐐�
+ res_node.setIsInflectionPoint(true);
+ //鎷愮偣鏂瑰悜
+ res_node.setDirection(result.get("direction").toString());
+ }
+ list.add(res_node);
+
+ fatherNode = res_node;//鎶婂綋鍓嶈妭鐐逛繚瀛樻垚涓�涓埗鑺傜偣
+ res_node = res_node.getFather();//杩唬鎿嶄綔
+ }
+
+ Collections.reverse(list);
+
+ //灏嗘瘡涓妭鐐归噷闈㈢殑fatherNode鑷充负null(鏂逛究鍚庣画璁$畻鏃剁埗鑺傜偣杩囧瀵艰嚧鏄剧ず鐨勮妭鐐瑰お澶�)
+ for (NavigateNode navigateNode : list) {
+ //鐖惰妭鐐硅缃负null锛屼笉褰卞搷璁$畻缁撴灉锛屼笉褰卞搷鍚庣画鎿嶄綔銆�
+ //姝ゆ搷浣滀粎涓哄悗缁帓鏌ュ鐞嗘彁渚涜瑙夋柟渚裤��
+ navigateNode.setFather(null);
+ }
+
+ //璧峰鑺傜偣璁$畻鏂瑰悜
+ String direction = calcDirection(list.get(0), list.get(1));
+ NavigateNode startNode = list.get(0);
+ startNode.setDirection(direction);
+ //鏇存柊鑺傜偣鍒楄〃
+ list.set(0, startNode);
+ return list;
+ }
+
+ public List<NavigateNode> calcPython(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
+ //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
+ int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
+ int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
+
+ ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+ whiteList.add(startArr);//灏嗗紑濮嬭妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊�
+ if (whites != null && !whites.isEmpty()) {
+ whiteList.addAll(whites);//鎵归噺娣诲姞鐧藉悕鍗曡妭鐐�
+ }
+
+ //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
+ int lev = Utils.getLev(startPoint);
+ NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+ int[][] map = solution.map;
+
+ //鍒濆鍖栧紑濮嬭妭鐐�
+ NavigateNode start = new NavigateNode(startArr[0], startArr[1]);
+ start.setNodeValue(map[startArr[0]][startArr[1]]);
+ //寮�濮嬭妭鐐规棤鐖惰妭鐐�
+ start.setFather(null);
+
+ NavigateNode end = new NavigateNode(endArr[0], endArr[1]);
+ end.setNodeValue(map[endArr[0]][endArr[1]]);
+ //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
+
+ String pathStr = solution.astarSearchPython(start, end, pythonCalcPath);
if (pathStr == null) {
News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
return null;
@@ -272,8 +354,7 @@
* 妫�娴嬭矾寰勬槸鍚﹀彲鐢�(鍙蛋)
*/
public boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev) {
- NavigateSolution solution = new NavigateSolution(NavigationMapType.DFX.id, lev, null, Utils.getShuttlePoints(shuttleNo, lev));//鑾峰彇鏃犵櫧鍚嶅崟鍦板浘(璇ュ湴鍥惧寘鍚皬杞﹀潗鏍�)
- int[][] map = solution.map;
+ int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.DFX.id, null, Utils.getShuttlePoints(shuttleNo, lev));
for (NavigateNode node : path) {
int value = map[node.getX()][node.getY()];
if (value != MapNodeType.NORMAL_PATH.id && value != MapNodeType.MAIN_PATH.id && value != MapNodeType.CHARGE.id && value != MapNodeType.CONVEYOR_CAR_GO.id) {//姣嶈建閬�3銆佸瓙杞ㄩ亾0銆佸厖鐢垫々5銆佸皬杞﹀彲璧拌緭閫佺珯
--
Gitblit v1.9.1