From 45fa9509e7b05e7529c7d82a7770cdd9594c1410 Mon Sep 17 00:00:00 2001 From: weidong Date: Tue, 16 Jan 2024 07:48:29 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=86=BB=E7=BB=93=E7=9A=84=E5=88=A4=E6=96=AD=EF=BC=8C=E5=86=BB?= =?UTF-8?q?=E7=BB=93=E6=95=B0=E6=8D=AE=E4=B8=BA=E5=9D=8F=E7=82=B9=202?= =?UTF-8?q?=E3=80=81=E8=87=AA=E9=80=82=E5=BA=94=E5=91=A8=E6=9C=9F=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sideslope/calc/GNSSCalcFilterService.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSCalcFilterService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSCalcFilterService.java index 06a94fd3..21c01332 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSCalcFilterService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSCalcFilterService.java @@ -33,6 +33,7 @@ public class GNSSCalcFilterService { static final float XY_THRESHOLD = 30; //水平异常点30mm static final float Z_THRESHOLD = 30; //高程异常点30mm static final float AUTO_THRESHOLD = 50; //触发自适应滤波的门限50mm + static final double MIN_CHANGE = 0.01; static class VaryFilterCycle{ public LocalDateTime startTime; @@ -116,6 +117,12 @@ public class GNSSCalcFilterService { newRecord.setEnabled(false); //记录为坏点,下次不参与滤波 logger.info(deviceId + " abnormal gnss data"); } + else if (Math.abs(newRecord.getB562e() - record0.getB562e()) < MIN_CHANGE && + Math.abs(newRecord.getB562n() - record0.getB562n()) < MIN_CHANGE && + Math.abs(newRecord.getB562d() - record0.getB562d()) < MIN_CHANGE) { + newRecord.setEnabled(false); //如果两次解算结果相等,数据有被冻住的嫌疑,记录为坏点,下次不参与滤波 + logger.info(deviceId + " abnormal gnss data"); + } else { // 求本组和最近recordNum组原始值的平均值 double sumE = newRecord.getB562e(); @@ -166,20 +173,22 @@ public class GNSSCalcFilterService { LocalDateTime cmpTime = now.minusHours(groupCalc.getFilter_min_hour()); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("deviceid", deviceId); - queryWrapper.ge("createtime",cmpTime.format(dateFormatter)); - queryWrapper.last("limit 1"); - GnssCalcData gnssCalcData = repository.selectOne(queryWrapper); - if(gnssCalcData != null && gnssCalcData.getEnabled()){ - if(gnssCalcData.getRb562e()!=null && gnssCalcData.getRb562d()!=null){ + queryWrapper.le("createtime",cmpTime.format(dateFormatter)); + queryWrapper.last("limit 3"); + queryWrapper.orderByDesc("createtime"); + List gnssCalcDataList = repository.selectList(queryWrapper); + for (GnssCalcData gnssCalcData:gnssCalcDataList) { + if (gnssCalcData.getEnabled() && gnssCalcData.getRb562e() != null) { double gapE = Math.abs(gnssCalcData.getRb562e() - curCalcData.getRb562e()); double gapN = Math.abs(gnssCalcData.getRb562n() - curCalcData.getRb562n()); - if(gapE>=groupCalc.getAuto_threshold() || gapN>=groupCalc.getAuto_threshold()){ + if (gapE >= groupCalc.getAuto_threshold() || gapN >= groupCalc.getAuto_threshold()) { VaryFilterCycle varyCycle1 = new VaryFilterCycle(); varyCycle1.startTime = now; varyCycle1.filterCycleHour = groupCalc.getFilter_min_hour(); autoCycleDevices.put(deviceId, varyCycle1); - logger.info(deviceId + ": filter cycle change to "+varyCycle1.filterCycleHour); + logger.info(deviceId + ": filter cycle change to " + varyCycle1.filterCycleHour); } + break; } } }