Example #1
0
        /// <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;
        }
Example #2
0
        /// <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);
        }