| | |
| | | return map.get(RgvPos); |
| | | } |
| | | |
| | | // 上一次位置(用于防跳变) |
| | | private Integer lastRgvPos1 = null; |
| | | private Integer lastRgvPos2 = null; |
| | | |
| | | // ================= 公共方法 ================= |
| | | private Integer getClosestSite(int rgvPos, Map<Integer, Integer> posMap, int tolerance) { |
| | | int minDiff = Integer.MAX_VALUE; |
| | | Integer result = 0; |
| | | |
| | | for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) { |
| | | int diff = Math.abs(rgvPos - entry.getValue()); |
| | | if (diff < minDiff) { |
| | | minDiff = diff; |
| | | result = entry.getKey(); |
| | | } |
| | | } |
| | | |
| | | // ⚠️ 不再返回0,强制返回最近点 |
| | | return result; |
| | | } |
| | | |
| | | // ================= RGV1 ================= |
| | | public Integer getRgvPosI1() { |
| | | // key: 站点号 value: 基准物理位置 |
| | | |
| | | Map<Integer, Integer> posMap = new HashMap<>(); |
| | | posMap.put(1004, 6534); |
| | | posMap.put(1007, 33634); |
| | |
| | | posMap.put(1031, 288194); |
| | | posMap.put(1035, 314954); |
| | | |
| | | int tolerance = 500; |
| | | |
| | | |
| | | int tolerance = 200; // 允许误差范围 |
| | | |
| | | for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) { |
| | | int site = entry.getKey(); |
| | | int basePos = entry.getValue(); |
| | | if (Math.abs(RgvPos - basePos) <= tolerance) { |
| | | return site; |
| | | } |
| | | // ========= 异常保护 ========= |
| | | if (RgvPos < 0 || RgvPos > 400000) { |
| | | return 0; |
| | | } |
| | | |
| | | return 0; // 没匹配到站点 |
| | | lastRgvPos1 = RgvPos; |
| | | |
| | | return getClosestSite(RgvPos, posMap, tolerance); |
| | | } |
| | | |
| | | // ================= RGV2 ================= |
| | | public Integer getRgvPosI2() { |
| | | // key: 站点号 value: 基准物理位置 |
| | | |
| | | Map<Integer, Integer> posMap = new HashMap<>(); |
| | | posMap.put(2003, 314954); |
| | | posMap.put(2006, 288094); |
| | | posMap.put(2009, 246574); |
| | | posMap.put(2012, 219584); |
| | | posMap.put(2015, 177934); |
| | | posMap.put(2018, 138126); |
| | | posMap.put(2021, 102124); |
| | | posMap.put(2024, 75174); |
| | | posMap.put(2027, 33748); |
| | | posMap.put(2030, 6449); |
| | | int tolerance = 200; // 允许误差范围 |
| | | posMap.put(2030, 314954); |
| | | posMap.put(2027, 288094); |
| | | posMap.put(2024, 246574); |
| | | posMap.put(2021, 219584); |
| | | posMap.put(2018, 177934); |
| | | posMap.put(2015, 138126); |
| | | posMap.put(2012, 102124); |
| | | posMap.put(2009, 75174); |
| | | posMap.put(2006, 33748); |
| | | posMap.put(2003, 6449); |
| | | |
| | | for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) { |
| | | int site = entry.getKey(); |
| | | int basePos = entry.getValue(); |
| | | if (Math.abs(RgvPos - basePos) <= tolerance) { |
| | | return site; |
| | | } |
| | | int tolerance = 500; |
| | | |
| | | // ========= 异常保护 ========= |
| | | if (RgvPos < 0 || RgvPos > 400000) { |
| | | return 0; |
| | | } |
| | | lastRgvPos2 = RgvPos; |
| | | |
| | | return 0; // 没匹配到站点 |
| | | return getClosestSite(RgvPos, posMap, tolerance); |
| | | } |
| | | |
| | | |