| | |
| | | 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; |
| | | |
| | | import java.io.BufferedReader; |
| | | import java.io.InputStreamReader; |
| | | import java.util.*; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * A*算法使用工具 |
| | |
| | | |
| | | @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); |
| | |
| | | |
| | | //获取当前节点计算的层高,并赋值到每一个节点中 |
| | | 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]]); |
| | | //开始节点,不纳入禁用节点内计算 |
| | | |
| | | NavigateNode res_node = solution.astarSearchJava(start, end); |
| | |
| | | |
| | | //获取当前节点计算的层高,并赋值到每一个节点中 |
| | | 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]); |
| | | NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints); |
| | | end.setNodeValue(map[endArr[0]][endArr[1]]); |
| | | //开始节点,不纳入禁用节点内计算 |
| | | |
| | | String pathStr = solution.astarSearchPython(start, end, pythonCalcPath); |
| | |
| | | } |
| | | |
| | | //判断当前节点到下一个节点是否为拐点 |
| | | public HashMap<String,Object> searchInflectionPoint(NavigateNode currentNode, NavigateNode fatherNode, NavigateNode nextNode) { |
| | | public HashMap<String, Object> searchInflectionPoint(NavigateNode currentNode, NavigateNode fatherNode, NavigateNode nextNode) { |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | map.put("result", false);//是否为拐点,true:拐点,false:直线 |
| | | // 第一个点或直线点 |
| | |
| | | if (currentNode.getX() - fatherNode.getX() > 0) { |
| | | //大于0,方向top |
| | | direction = "top"; |
| | | }else { |
| | | } else { |
| | | //小于0,方向bottom |
| | | direction = "bottom"; |
| | | } |
| | |
| | | if (currentNode.getY() - fatherNode.getY() > 0) { |
| | | //大于0,方向left |
| | | direction = "left"; |
| | | }else { |
| | | } else { |
| | | //小于0,方向right |
| | | direction = "right"; |
| | | } |
| | |
| | | * 检测路径是否可用(可走) |
| | | */ |
| | | 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、小车可走输送站 |