1、增加算法6

This commit is contained in:
weidong 2024-09-04 08:40:14 +08:00
parent 8404942dd8
commit 20fdbfff8a
2 changed files with 10 additions and 18 deletions

View File

@ -337,14 +337,14 @@ public class GNSSCalcFilterService {
public double[] calcFilterValueByLastDay(GnssCalcData curCalcData, GnssGroupCalc groupCalc,
double xyCompressRate, double zCompressRate){
LocalDateTime now = curCalcData.getCreatetime();
LocalDateTime beginTime = now.minusHours(25);
LocalDateTime beginTime = now.minusHours(48);
QueryWrapper<GnssCalcData> query = new QueryWrapper<>();
query.eq("deviceid", curCalcData.getDeviceid());
query.ge("createtime", beginTime);
query.orderByAsc("createtime");
List<GnssCalcData> calcDataList = repository.selectList(query);
if(calcDataList.size()<16*6) return null; //至少有2/3的时间有固定解
if(calcDataList.size()<24*6) return null; //至少有2/3的时间有固定解
else{//周期至少24小时
if(calcDataList.get(0).getCreatetime().isAfter(now.minusHours(24))) return null;
}
@ -353,18 +353,7 @@ public class GNSSCalcFilterService {
double e = avgPoint(calcDataList, GnssCalcData::getB562e);
double n = avgPoint(calcDataList, GnssCalcData::getB562n);
double u = avgPoint(calcDataList, GnssCalcData::getB562d);
// 比较是否是好点
if(Math.abs(e-curCalcData.getB562e())*xyCompressRate<=groupCalc.getXy_threshold() &&
Math.abs(n-curCalcData.getB562n())*xyCompressRate<=groupCalc.getXy_threshold()&&
Math.abs(u-curCalcData.getB562d())*zCompressRate<=groupCalc.getZ_threshold()){
curCalcData.setEnabled(true);
curCalcData.setRpose(NumberUtils.scaleTwo(e));
curCalcData.setRposn(NumberUtils.scaleTwo(n));
curCalcData.setRposd(NumberUtils.scaleTwo(u));
return new double[]{e,n,u};
}
return null;
return new double[]{e,n,u};
}
double avgPoint(List<GnssCalcData> points, Function<GnssCalcData, Double> getFunction){

View File

@ -244,10 +244,13 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
}
//检查过去24小时是否有有效解如果没有用24小时固定解求一个均值作为
else if(focusCalculator.getReferPoint() == null){
double[] avgEnu = gnssCalcFilterService.calcFilterValueByLastDay(locationRecord, groupCalc,0.2,0.1);
logger.info("{} calc 24 hours filtered pos",deviceId);
if(avgEnu != null){
((FocusCalculator6)focusCalculator).setOriginalReferPoint(avgEnu);
if(latestRpos != null) focusCalculator.setReferPoint(latestRpos);
else {
double[] avgEnu = gnssCalcFilterService.calcFilterValueByLastDay(locationRecord, groupCalc, 0.2, 0.1);
logger.info("{} calc 24 hours filtered pos", deviceId);
if (avgEnu != null) {
((FocusCalculator6) focusCalculator).setOriginalReferPoint(avgEnu);
}
}
}
}