/// <summary> /// 构造函数,采用GNSS计算配置构造。 /// </summary> /// <param name="Option"></param> public ReverseCycleSlipeReviser(GnssProcessOption Option) { this.Name = "逆序周跳探测器"; if (Option.MinFrequenceCount == 1) { Detector = (CycleSlipDetectReviser.DefaultSingeFrequencyDetector(Option, true)); } else if (Option.MinFrequenceCount == 2) { Detector = CycleSlipDetectReviser.DefaultDoubleFrequencyDetector(Option, true); } else { Detector = CycleSlipDetectReviser.DefaultTripleFrequencyDetector(true); } this.MinNum = 10; }
/// <summary> /// 获取默认的周跳探测标记器。 /// </summary> /// <param name="Context"></param> /// <param name="Option"></param> /// <returns></returns> public static EpochInfoReviseManager GetDefaultCycleSlipDetectReviser(DataSourceContext Context, GnssProcessOption Option) { EpochInfoReviseManager processer = new EpochInfoReviseManager(Context, Option); #region 周跳管理器,这个应该放在最后,以免有的数据漏标或错标 //需要一个维护卫星状态的类,避免新卫星受老数据的影响 if (Option.IsCycleSlipDetectionRequired) { //优先考虑周跳探测器开关 //若无,或全关,则选择默认。 if (Option.CycleSlipDetectSwitcher.Count != 0 || Option.CycleSlipDetectSwitcher.Values.Count(m => !m) != 0) { CycleSlipDetectReviser resise = new CycleSlipDetectReviser(); foreach (var item in Option.CycleSlipDetectSwitcher) { if (item.Value) { var obj = CycleSlipDetectReviser.Create(item.Key, Option); resise.Add(obj); } } processer.AddProcessor(resise); log.Info("采用了指定的周跳探测方法。"); } if (processer.Precessors.Count == 0) { //首先根据观测类型设置周跳探测器 if (Option.ObsDataType == SatObsDataType.PhaseA || Option.ObsDataType == SatObsDataType.PhaseRangeA || Option.ObsDataType == SatObsDataType.PhaseB || Option.ObsDataType == SatObsDataType.PhaseRangeB || Option.ObsDataType == SatObsDataType.PhaseC || Option.ObsDataType == SatObsDataType.PhaseRangeC) { if (Option.GnssSolverType == GnssSolverType.非差非组合PPP) { processer.AddProcessor(CycleSlipDetectReviser.DefaultDoubleFrequencyDetector(Option)); log.Info("采用了双频默认周跳探测方法。"); } else { processer.AddProcessor(CycleSlipDetectReviser.DefaultSingeFrequencyDetector(Option)); log.Info("采用了单频默认周跳探测方法。"); } } else if (Option.MinFrequenceCount >= 2) { //throw new NotSupportedException("周跳探测不应该出现在这里。"); processer.AddProcessor(CycleSlipDetectReviser.DefaultDoubleFrequencyDetector(Option)); log.Info("采用了双频默认周跳探测方法。"); } if (Option.ApproxDataType == SatApproxDataType.ApproxPhaseRangeOfTriFreq || Option.ApproxDataType == SatApproxDataType.ApproxPseudoRangeOfTriFreq) { processer.Clear(); processer.AddProcessor(CycleSlipDetectReviser.DefaultTripleFrequencyDetector()); log.Info("采用了三频默认周跳探测方法。"); } } } #endregion return(processer); }