From 7bfc7ec610d600e2b39c5fbfcd9cf17d901a2b10 Mon Sep 17 00:00:00 2001 From: weidong Date: Mon, 17 Mar 2025 10:14:01 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E8=A7=A3=E7=AE=97=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=A1=A8=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=9A=E6=98=AF=E5=90=A6=E7=A8=B3=E5=AE=9A=E3=80=82=E6=AF=8F?= =?UTF-8?q?=E6=AC=A1=E6=BB=A4=E6=B3=A2=E6=97=B6=E6=A3=80=E6=9F=A5=E6=BB=A4?= =?UTF-8?q?=E6=B3=A2=E7=AA=97=E5=8F=A3=E5=86=85=E7=9A=84=E5=8E=9F=E5=A7=8B?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=97=B6=E9=97=B4=EF=BC=8C=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E8=B7=9D=E7=A6=BB=E6=9C=80=E5=90=8E=E4=B8=80?= =?UTF-8?q?=E6=9D=A1=E6=97=B6=E9=97=B4=E8=B6=85=E8=BF=87=E6=BB=A4=E6=B3=A2?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E7=9A=842/3=E6=97=B6=EF=BC=8C=E7=A8=B3?= =?UTF-8?q?=E5=AE=9A=E5=AD=97=E6=AE=B5=E8=AE=BE=E4=B8=BAtrue=EF=BC=8C?= =?UTF-8?q?=E5=90=A6=E5=88=99false=202=E3=80=81=E5=91=A8=E8=B7=B3=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E6=94=B9=E4=B8=BA=E4=B8=9C+=E5=8C=97=E7=9A=84?= =?UTF-8?q?=E4=BD=8D=E7=A7=BB=E4=B9=8B=E5=92=8C=E4=B8=8E=E9=97=A8=E9=99=90?= =?UTF-8?q?=E6=AF=94=E8=BE=83=EF=BC=8C=E9=97=A8=E9=99=90=E6=94=B9=E4=B8=BA?= =?UTF-8?q?800mm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.txt | 8 +++++++- .../java/com/imdroid/secapi/dto/GnssCalcData.java | 3 +++ .../com/imdroid/sideslope/bd/FocusCalculator3.java | 7 +++---- .../sideslope/calc/GNSSCalcFilterService.java | 7 ++++++- sec-beidou/src/main/resources/db/schema.sql | 1 + .../resources/templates/page/gnss_data_calc.html | 12 ++++++++++++ 6 files changed, 32 insertions(+), 6 deletions(-) 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