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,19 +353,8 @@ 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;
}
double avgPoint(List<GnssCalcData> points, Function<GnssCalcData, Double> getFunction){
if(points.size() == 0) return 0;

View File

@ -244,6 +244,8 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
}
//检查过去24小时是否有有效解如果没有用24小时固定解求一个均值作为
else if(focusCalculator.getReferPoint() == null){
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) {
@ -251,6 +253,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
}
}
}
}
else if(focusCalculator.getVer()==4) {
if(locationRecord.getRpose()!=null) {
focusCalculator.setReferPoint(