| | |
| | | private Boolean isInflectionPoint;//是否为拐点 |
| | | private String direction;//行走方向 |
| | | private Integer moveDistance;//行走距离 |
| | | private Integer nodeValue;//节点数据 |
| | | |
| | | public NavigateNode(int x, int y) { |
| | | this.x = x; |
| | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.core.common.SpringUtils; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.BasMap; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.model.MapNode; |
| | |
| | | ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class); |
| | | //带小车地图 |
| | | List<List<MapNode>> listsHasShuttle = navigateMapData.filterMap(NavigationMapType.NONE.id, arrayList, lev, null, shuttlePoints);//获取带小车地图数据 |
| | | List<List<MapNode>> lists = navigateMapData.filterMap(NavigationMapType.NONE.id, arrayList, lev, null, null);//获取全部地图数据 |
| | | |
| | | //获取全部地图数据 |
| | | List<List<MapNode>> lists = navigateMapData.rebuildData(arrayList); |
| | | //载入库位信息 |
| | | lists = navigateMapData.loadLocMast(NavigationMapType.NONE.id, lists, lev, null); |
| | | |
| | | //检测路径是否被锁定 |
| | | if (lock) { |
| | |
| | | } |
| | | |
| | | //尝试锁定/解锁路径 |
| | | List<List<MapNode>> realMap = navigateMapData.getJsonData(nodes.get(0).getZ(), -1, null, null);//获取完整地图(包括入库出库) |
| | | for (NavigateNode node : nodes) { |
| | | if (node.getZ() != lev) { |
| | | continue; |
| | |
| | | if (lock) { |
| | | mapNode.setValue(MapNodeType.LOCK.id);//禁用库位 |
| | | } else { |
| | | //获取原始节点数据 |
| | | List<MapNode> rows = realMap.get(node.getX()); |
| | | MapNode col = rows.get(node.getY()); |
| | | mapNode.setValue(col.getValue());//恢复库位 |
| | | mapNode.setValue(node.getNodeValue());//恢复原始节点数据 |
| | | } |
| | | |
| | | listX.set(node.getY(), mapNode); |
| | |
| | | if (is_valid(x + 1, y)) |
| | | { |
| | | NavigateNode node = new NavigateNode(x + 1, y); |
| | | node.setNodeValue(map[x + 1][y]); |
| | | neighbour_node.add(node); |
| | | } |
| | | if (is_valid(x - 1, y)) |
| | | { |
| | | NavigateNode node = new NavigateNode(x -1, y); |
| | | NavigateNode node = new NavigateNode(x - 1, y); |
| | | node.setNodeValue(map[x - 1][y]); |
| | | neighbour_node.add(node); |
| | | } |
| | | } |
| | |
| | | if (is_valid(x, y + 1)) |
| | | { |
| | | NavigateNode node = new NavigateNode(x, y + 1); |
| | | node.setNodeValue(map[x][y + 1]); |
| | | neighbour_node.add(node); |
| | | } |
| | | if (is_valid(x, y - 1)) |
| | | { |
| | | NavigateNode node = new NavigateNode(x, y - 1); |
| | | node.setNodeValue(map[x][y - 1]); |
| | | neighbour_node.add(node); |
| | | } |
| | | } |
| | |
| | | if (is_valid(x, y + 1)) |
| | | { |
| | | NavigateNode node = new NavigateNode(x, y + 1); |
| | | node.setNodeValue(map[x][y + 1]); |
| | | neighbour_node.add(node); |
| | | } |
| | | if (is_valid(x, y - 1)) |
| | | { |
| | | NavigateNode node = new NavigateNode(x, y - 1); |
| | | node.setNodeValue(map[x][y - 1]); |
| | | neighbour_node.add(node); |
| | | } |
| | | } |
| | |
| | | if (is_valid(x + 1, y)) |
| | | { |
| | | NavigateNode node = new NavigateNode(x + 1, y); |
| | | node.setNodeValue(map[x + 1][y]); |
| | | neighbour_node.add(node); |
| | | } |
| | | if (is_valid(x - 1, y)) |
| | | { |
| | | NavigateNode node = new NavigateNode(x -1, y); |
| | | NavigateNode node = new NavigateNode(x - 1, y); |
| | | node.setNodeValue(map[x - 1][y]); |
| | | neighbour_node.add(node); |
| | | } |
| | | } |
| | |
| | | |
| | | //获取当前节点计算的层高,并赋值到每一个节点中 |
| | | 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); |