diff --git a/readme.txt b/readme.txt index 77c78864..1cebf0b4 100644 --- a/readme.txt +++ b/readme.txt @@ -41,4 +41,10 @@ beidou-exapi 9908(外) 告警: 1)离线:设备记录最后一次收到任何数据的时间。定时任务检查设备最后一次时间,如果与当前时间差距大于门限,则判断为离线;D3F0/D3F2清除离线告警 2)连续无效解:每次解算完,如果是无效解,则无效解次数加1;否则清0;如果等于N,则产生一次告警。 -3)连续无固定解:每个周期结束,如果是有效解解,则记录当前时间;D3F2检测当前时间和最近一次有效解时间差距,如果大于N,则产生一次告警。 \ No newline at end of file +3)连续无固定解:每个周期结束,如果是有效解解,则记录当前时间;D3F2检测当前时间和最近一次有效解时间差距,如果大于N,则产生一次告警。 + +2025-03 +优化推送策略: +1)解算数据表增加一个字段:是否稳定。每次滤波时检查滤波窗口内的原始数据时间,当前时间距离最后一条时间超过滤波窗口的2/3时,稳定字段设为true,否则false +2)每次推送只推送稳定字段为true的结果 +例如滤波窗口是24小时,最近一次上线时间是0点,13点上线,则将开始上线时间置为13点,第二天13点开始推送 \ No newline at end of file diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcData.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcData.java index f698ba24..ac5e7d94 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcData.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcData.java @@ -75,4 +75,7 @@ public class GnssCalcData { @ExcelProperty("平均延迟") Integer pps; + + @ExcelProperty("是否稳定") + Boolean stabled; } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java index a0c3909d..d7125242 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java @@ -15,7 +15,7 @@ import static com.imdroid.sideslope.bd.GeoCoordConverterUtil.*; */ public class FocusCalculator3 extends FocusCalculator1{ //final static long scale = 100000000L;//地球1°:111km,放大到mm乘以100,000,000 - final static int bad_change_mm = 300;//固定解跳变连续10次超过500mm,认为是周跳 + final static int bad_change_mm = 800;//固定解水平跳变连续10次超过800mm,认为是周跳 final static int bad_duration = 10; int bad_count = 0; @@ -62,9 +62,8 @@ public class FocusCalculator3 extends FocusCalculator1{ counterFixedResult++; if(pointList.size()>0){ double[] lastXyz = pointList.get(pointList.size()-1); - if(Math.abs(end[0]-lastXyz[0])>bad_change_mm || - Math.abs(end[1]-lastXyz[1])>bad_change_mm || - Math.abs(end[2]-lastXyz[2])>bad_change_mm){ + if((Math.abs(end[0]-lastXyz[0])+Math.abs(end[1]-lastXyz[1])>bad_change_mm ) + || (Math.abs(end[2]-lastXyz[2])>bad_change_mm)){ bad_count++; return; } 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 583df40f..f8427846 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 @@ -138,6 +138,7 @@ public class GNSSCalcFilterService { double msumD = sumD; int count = 1; int minCount = 1; + LocalDateTime lastRecordTime = null; for (GnssCalcData record : gnssHistoryRecords) { if (record.getEnabled()) {//只选取好点参与滤波 @@ -145,8 +146,10 @@ public class GNSSCalcFilterService { sumN += record.getB562n(); sumD += record.getB562d(); count++; + //记录最后一条有效解的时间 + lastRecordTime = record.getCreatetime(); // 计算短周期 - if(record.getCreatetime().isAfter(minCycleTime)){ + if(lastRecordTime.isAfter(minCycleTime)){ msumE = sumE; msumN = sumN; msumD = sumD; @@ -162,6 +165,8 @@ public class GNSSCalcFilterService { newRecord.setAuxe(NumberUtils.scaleTwo(msumE / minCount)); newRecord.setAuxn(NumberUtils.scaleTwo(msumN / minCount)); newRecord.setAuxd(NumberUtils.scaleTwo(msumD / minCount)); + //滤波窗口里的时间跨度超过滤波时间的2/3才认为稳定 + newRecord.setStabled(lastRecordTime.isBefore(newRecordTime.minusHours(filterCycleHour * 2 / 3))); return true; } } diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index ef84528e..66e0b830 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -168,6 +168,7 @@ CREATE TABLE IF NOT EXISTS `gnssdevicelocationrecords` ( `auxn` double DEFAULT NULL COMMENT '中间过程北N', `auxd` double DEFAULT NULL COMMENT '中间过程天D', `pps` int DEFAULT NULL, + `stabled` bit(1) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_deviceid_time` (`createtime` desc,`deviceid`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html b/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html index 7369327b..c9c5757c 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html @@ -132,6 +132,7 @@ {field: 'r9250n', title: '拟合北', templet: "
{{d.r9250n==null?'':d.r9250n.toFixed(2)}}
"}, {field: 'r9250d', title: '拟合天', templet: "
{{d.r9250d==null?'':d.r9250d.toFixed(2)}}
"}, {field: 'enabled', title: '有效',templet: '#enabledTrans'}, + {field: 'stabled', title: '稳定',templet: '#stabledTrans'}, {title: '操作', toolbar: '#currentTableBar', fixed: "right", width: 100} ]; if([[${role}]] != "SUPER_ADMIN") { @@ -139,6 +140,7 @@ data_cols[10].hide = true; data_cols[11].hide = true; data_cols[13].hide = true; + data_cols[14].hide = true; } /** * 初始化表单,要加上,不然刷新部分组件可能会不加载 @@ -595,5 +597,15 @@ {{# } }} + + \ No newline at end of file