#
1
3 天以前 7c264be282c33feedbd4478f7e674ebac8fd55db
src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -430,8 +430,30 @@
        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);
@@ -444,22 +466,21 @@
        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(2030, 314954);
        posMap.put(2027, 288094);
@@ -471,17 +492,16 @@
        posMap.put(2009, 75174);
        posMap.put(2006, 33748);
        posMap.put(2003, 6449);
        int tolerance = 500; // 允许误差范围
        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);
    }