1、优化有效点判断方法:满足以下两个条件为有效:
1)和前一个解相比小于门限 2)和前二个解相比小于门限,或者和滤波后的解相比小于门限
This commit is contained in:
parent
0aca5d7041
commit
0b61447274
@ -68,14 +68,37 @@ public class GNSSCalcFilterService {
|
|||||||
// 检查是不是坏点
|
// 检查是不是坏点
|
||||||
GnssCalcData record0 = null;
|
GnssCalcData record0 = null;
|
||||||
if(gnssHistoryRecords.size()>0) record0 = gnssHistoryRecords.get(0);
|
if(gnssHistoryRecords.size()>0) record0 = gnssHistoryRecords.get(0);
|
||||||
if(record0 != null && Math.abs(record0.getB562e() - newRecord.getB562e())<0.001) {
|
|
||||||
|
//如果上一个点为空,则这个点是第一个点,判为无效
|
||||||
|
if(record0 == null) return false;
|
||||||
|
//连续两个相同的点也认为无效
|
||||||
|
if(Math.abs(record0.getB562e() - newRecord.getB562e())<0.001) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(referPos==null && record0!=null) {
|
//和上一个点相比,超过门限则认为无效
|
||||||
referPos = new double[]{record0.getB562e(), record0.getB562n(), record0.getB562d()};
|
if (Math.abs(newRecord.getB562e() - record0.getB562e()) > xyThreshold ||
|
||||||
|
Math.abs(newRecord.getB562n() - record0.getB562n()) > xyThreshold ||
|
||||||
|
Math.abs(newRecord.getB562d() - record0.getB562d()) > zThreshold) {
|
||||||
|
isGood = false; //记录为坏点,下次不参与滤波
|
||||||
|
logger.debug("{} bad point",newRecord.getDeviceid());
|
||||||
}
|
}
|
||||||
if(referPos==null) return false;
|
// 如果是好点,对于增强算法还需做进一步判断
|
||||||
|
if(isGood && isAdvFilter){
|
||||||
|
//和参考点比,如果是坏点,再和前二个点比如果还是坏点才认为是坏点
|
||||||
|
isGood =(referPos!=null && (Math.abs(newRecord.getB562e() - referPos[0]) <= xyThreshold &&
|
||||||
|
Math.abs(newRecord.getB562n() - referPos[1]) <= xyThreshold &&
|
||||||
|
Math.abs(newRecord.getB562d() - referPos[2]) <= zThreshold));
|
||||||
|
if(!isGood){
|
||||||
|
GnssCalcData record1 = null;
|
||||||
|
if (gnssHistoryRecords.size() > 1) record1 = gnssHistoryRecords.get(1);
|
||||||
|
isGood =(record1 == null ||
|
||||||
|
((Math.abs(newRecord.getB562e() - record1.getB562e()) <= xyThreshold &&
|
||||||
|
Math.abs(newRecord.getB562n() - record1.getB562n()) <= xyThreshold &&
|
||||||
|
Math.abs(newRecord.getB562d() - record1.getB562d()) <= zThreshold)));
|
||||||
|
}
|
||||||
|
logger.debug("{} point adv judge {}",newRecord.getDeviceid(), isGood);
|
||||||
|
}
|
||||||
|
/*
|
||||||
if (Math.abs(newRecord.getB562e() - referPos[0]) > xyThreshold ||
|
if (Math.abs(newRecord.getB562e() - referPos[0]) > xyThreshold ||
|
||||||
Math.abs(newRecord.getB562n() - referPos[1]) > xyThreshold ||
|
Math.abs(newRecord.getB562n() - referPos[1]) > xyThreshold ||
|
||||||
Math.abs(newRecord.getB562d() - referPos[2]) > zThreshold) {
|
Math.abs(newRecord.getB562d() - referPos[2]) > zThreshold) {
|
||||||
@ -87,13 +110,16 @@ public class GNSSCalcFilterService {
|
|||||||
GnssCalcData record1 = null;
|
GnssCalcData record1 = null;
|
||||||
if(gnssHistoryRecords.size()>1) record1 = gnssHistoryRecords.get(1);
|
if(gnssHistoryRecords.size()>1) record1 = gnssHistoryRecords.get(1);
|
||||||
if(record1 == null ||
|
if(record1 == null ||
|
||||||
Math.abs(newRecord.getB562e() - record1.getB562e()) > xyThreshold*2 ||
|
(Math.abs(newRecord.getB562e() - record1.getB562e()) > xyThreshold*2 ||
|
||||||
Math.abs(newRecord.getB562n() - record1.getB562n()) > xyThreshold*2 ||
|
Math.abs(newRecord.getB562n() - record1.getB562n()) > xyThreshold*2 ||
|
||||||
Math.abs(newRecord.getB562d() - record1.getB562d()) > zThreshold*2) {
|
Math.abs(newRecord.getB562d() - record1.getB562d()) > zThreshold*2) ||
|
||||||
|
(Math.abs(newRecord.getB562e() - referPos[0]) > xyThreshold ||
|
||||||
|
Math.abs(newRecord.getB562n() - referPos[1]) > xyThreshold ||
|
||||||
|
Math.abs(newRecord.getB562d() - referPos[2]) > zThreshold)) {
|
||||||
logger.debug("{} adv filter bad point",newRecord.getDeviceid());
|
logger.debug("{} adv filter bad point",newRecord.getDeviceid());
|
||||||
isGood = false; //记录为坏点,下次不参与滤波
|
isGood = false; //记录为坏点,下次不参与滤波
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
return isGood;
|
return isGood;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,7 +200,7 @@ public class GNSSCalcFilterService {
|
|||||||
// 选取[newRecordTime-filterCycleHour, newRcordTime]之间的记录做平滑
|
// 选取[newRecordTime-filterCycleHour, newRcordTime]之间的记录做平滑
|
||||||
// 如果这个时间段的记录数少于FILTER_MIN_RECORD_NUM,本次不做平滑
|
// 如果这个时间段的记录数少于FILTER_MIN_RECORD_NUM,本次不做平滑
|
||||||
LocalDateTime newRecordTime = newRecord.getCreatetime();
|
LocalDateTime newRecordTime = newRecord.getCreatetime();
|
||||||
LocalDateTime filterAfterTime = newRecordTime.minusHours(filterCycleHour<zFilterCycleHour?zFilterCycleHour:filterCycleHour);
|
LocalDateTime filterAfterTime = newRecordTime.minusHours(Math.max(filterCycleHour,zFilterCycleHour));
|
||||||
LocalDateTime xyFilterTime = newRecordTime.minusHours(filterCycleHour);
|
LocalDateTime xyFilterTime = newRecordTime.minusHours(filterCycleHour);
|
||||||
LocalDateTime zFilterTime = newRecordTime.minusHours(zFilterCycleHour);
|
LocalDateTime zFilterTime = newRecordTime.minusHours(zFilterCycleHour);
|
||||||
LocalDateTime minCycleTime = newRecordTime.minusHours(minCycleHour);
|
LocalDateTime minCycleTime = newRecordTime.minusHours(minCycleHour);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user