package com.zy.acs.manager.common.utils; import com.alibaba.fastjson.JSON; import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.core.constant.MapDataConstant; import com.zy.acs.manager.core.domain.VehicleFootprint; import com.zy.acs.manager.manager.entity.AgvModel; import java.util.*; /** * Created by vincent on 8/7/2024 */ public class MapDataUtils { public static Double[][][] preComputeCdaMatrix(String[][] cdaStrMatrix) { int rows = cdaStrMatrix.length; int cols = cdaStrMatrix[0].length; Double[][][] cdaMatrix = new Double[rows][cols][2]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { List cda = MapDataUtils.parseCdaNode(cdaStrMatrix[i][j]); cdaMatrix[i][j][0] = cda.get(0); cdaMatrix[i][j][1] = cda.get(1); } } return cdaMatrix; } public static List parseWaveNode(String waveNodeStr) { List waveNodeList = new ArrayList<>(); if (Cools.isEmpty(waveNodeStr)) { return waveNodeList; } return JSON.parseArray(waveNodeStr, String.class); } public static List parseCdaNode(String cdaNodeStr) { if (Cools.isEmpty(cdaNodeStr)) { return new ArrayList<>(); } return JSON.parseArray(cdaNodeStr, Double.class); } public static List hasOtherWave(List list, String vehicle) { if (Cools.isEmpty(list)) { return list; } list.removeIf(next -> next.equals(vehicle)); return list; } public static String generateWaveNode(String originStr, String waveNode) { List originNode = JSON.parseArray(originStr, String.class); Set set = new HashSet<>(originNode); set.add(waveNode); return JSON.toJSONString(set); } public static Double getVehicleWaveSafeDistance(Number mm) { return getVehicleWaveSafeDistance(mm, null); } public static Double getVehicleWaveSafeDistance(Number mm, Double factor) { if (mm == null) { throw new IllegalArgumentException("Invalid map length: " + mm); } double val = mm.doubleValue(); if (val <= 0) { throw new IllegalArgumentException("Invalid map length: " + mm); } factor = Optional.ofNullable(factor).orElse(MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR); return val * factor; } public static VehicleFootprint buildFootprint(AgvModel agvModel) { if (null == agvModel) { throw new IllegalArgumentException("AgvModel is null"); } if (agvModel.getHeadOffset() == null || agvModel.getHeadOffset() <= 0) { throw new IllegalArgumentException("Invalid head offset: " + agvModel.getHeadOffset()); } if (agvModel.getTailOffset() == null || agvModel.getTailOffset() <= 0) { throw new IllegalArgumentException("Invalid tail offset: " + agvModel.getTailOffset()); } if (agvModel.getWidth() == null || agvModel.getWidth() <= 0) { throw new IllegalArgumentException("Invalid width: " + agvModel.getWidth()); } double head = agvModel.getHeadOffset(); double tail = agvModel.getTailOffset(); double halfWidth = (double) agvModel.getWidth() / 2; return new VehicleFootprint(head, tail, halfWidth); } }