1、解算数据表增加一个字段:是否稳定。每次滤波时检查滤波窗口内的原始数据时间,当前时间距离最后一条时间超过滤波窗口的2/3时,稳定字段设为true,否则false

2、周跳判断改为东+北的位移之和与门限比较,门限改为800mm
This commit is contained in:
weidong 2025-03-17 10:14:01 +08:00
parent 090e148738
commit 7bfc7ec610
6 changed files with 32 additions and 6 deletions

View File

@ -41,4 +41,10 @@ beidou-exapi 9908(外)
告警:
1离线设备记录最后一次收到任何数据的时间。定时任务检查设备最后一次时间如果与当前时间差距大于门限则判断为离线D3F0/D3F2清除离线告警
2连续无效解每次解算完如果是无效解则无效解次数加1否则清0如果等于N则产生一次告警。
3连续无固定解每个周期结束如果是有效解解则记录当前时间D3F2检测当前时间和最近一次有效解时间差距如果大于N则产生一次告警。
3连续无固定解每个周期结束如果是有效解解则记录当前时间D3F2检测当前时间和最近一次有效解时间差距如果大于N则产生一次告警。
2025-03
优化推送策略:
1解算数据表增加一个字段是否稳定。每次滤波时检查滤波窗口内的原始数据时间当前时间距离最后一条时间超过滤波窗口的2/3时稳定字段设为true否则false
2每次推送只推送稳定字段为true的结果
例如滤波窗口是24小时最近一次上线时间是0点13点上线则将开始上线时间置为13点第二天13点开始推送

View File

@ -75,4 +75,7 @@ public class GnssCalcData {
@ExcelProperty("平均延迟")
Integer pps;
@ExcelProperty("是否稳定")
Boolean stabled;
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -132,6 +132,7 @@
{field: 'r9250n', title: '拟合北', templet: "<div>{{d.r9250n==null?'':d.r9250n.toFixed(2)}}</div>"},
{field: 'r9250d', title: '拟合天', templet: "<div>{{d.r9250d==null?'':d.r9250d.toFixed(2)}}</div>"},
{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 @@
{{# } }}
</script>
<script type="text/html" id="stabledTrans">
{{# if(d.stabled == false){ }}
<span></span>
{{# } else if(d.stabled == true){ }}
<span></span>
{{# } else { }}
<span></span>
{{# } }}
</script>
</body>
</html>