Пример #1
0
        public override void Init()
        {
            this.DataSource  = new RinexFileObsDataSource(FilePath);
            this.Result      = new ObjectTableStorage();                   //最后结果
            this.Result.Name = DataSource.SiteInfo.SiteName + namePostfix; //
            if (String.IsNullOrWhiteSpace(Result.Name))
            {
                Result.Name = Path.GetFileNameWithoutExtension(FilePath);
            }

            this.BuffferStream = new BufferedStreamService <EpochInformation>(DataSource);


            //如果平滑伪距,则需要周跳探测
            Revisers = new EpochInfoReviseManager();
            if (IsSmoothRange)
            {
                var interval          = DataSource.ObsInfo.Interval;
                int smoothEpochCount  = (int)(600 / interval);//10 min windowData.MaxKeyGap = source.ObsInfo.Interval * 5;//已经包含着周跳探测中了
                var CycleSlipDetector = CycleSlipDetectReviser.DefaultDoubleFrequencyDetector();
                var rangeReviser      = new PhaseSmoothRangeReviser(true, false, smoothEpochCount, true, IonoDifferCorrectionType.DualFreqCarrier);

                Revisers.AddProcessor(CycleSlipDetector);
                Revisers.AddProcessor(rangeReviser);
            }
        }
Пример #2
0
        public CycleSlipDetectReviser CreateCsReviser()
        {
            var obsType = enumRadioControl1.GetCurrent <SatObsDataType>();
            var types   = enumCheckBoxControl1.GetSelected <CycleSlipDetectorType>();

            return(CycleSlipDetectReviser.CreateCycleSlipReviser(obsType, types, Option));
        }
Пример #3
0
        public override void Init()
        {
            this.DataSource = new RinexFileObsDataSource(FilePath);
            var interval = DataSource.ObsInfo.Interval == 0? 30: DataSource.ObsInfo.Interval;

            this.WindowDataManager = new WindowDataManager <SatelliteNumber, Time, WeightedNumeral>(int.MaxValue / 2, interval * 3); //过程计算工具
            this.BuffferStream     = new BufferedStreamService <EpochInformation>(DataSource);


            //如果平滑伪距,则需要周跳探测
            Revisers = new EpochInfoReviseManager();
            if (IsSmoothRange)
            {
                int smoothEpochCount  = (int)(600 / interval);//10 min windowData.MaxKeyGap = source.ObsInfo.Interval * 5;//已经包含着周跳探测中了
                var CycleSlipDetector = CycleSlipDetectReviser.DefaultDoubleFrequencyDetector();
                var rangeReviser      = new PhaseSmoothRangeReviser(true, false, smoothEpochCount, true, IonoDifferCorrectionType.DualFreqCarrier);

                Revisers.AddProcessor(CycleSlipDetector);
                Revisers.AddProcessor(rangeReviser);
            }
            this.Result      = new MultiSatPeriodRmsNumeralStorage(Path.GetFileName(FilePath) + "_MW最后结果"); //最后结果
            this.Result.Name = DataSource.SiteInfo.SiteName;                                                //
            if (String.IsNullOrWhiteSpace(Result.Name))
            {
                Result.Name = Path.GetFileNameWithoutExtension(FilePath);
            }
        }
Пример #4
0
        /// <summary>
        /// 单频平滑伪距
        /// </summary>
        /// <param name="prn"></param>
        /// <param name="PhaseSmoothRangeBulider"></param>
        /// <param name="records"></param>
        private void DualFreqPhaseSmoothRange(SatelliteNumber prn, NamedCarrierSmoothedRangeBuilderManager PhaseSmoothRangeBulider)
        {
            ObjectTableStorage         table                  = new ObjectTableStorage();
            MemoRinexFileObsDataSource observations           = new MemoRinexFileObsDataSource(this.ObsFile);
            CycleSlipDetectReviser     cycleSlipDetectReviser = new CycleSlipDetectReviser();

            while (observations.MoveNext())
            {
                var current = observations.Current;
                cycleSlipDetectReviser.Revise(ref current);

                if (current.Contains(prn))
                {
                    table.NewRow();
                    table.AddItem("Epoch", current.ReceiverTime);

                    var epochSat = current[prn];

                    var smootherP1 = PhaseSmoothRangeBulider.GetOrCreate("P");

                    var PS = smootherP1
                             .SetReset(epochSat.IsUnstable)
                             .SetRawValue(current.ReceiverTime,
                                          epochSat.Combinations.IonoFreeRange.Value,
                                          epochSat.Combinations.IonoFreePhaseRange.Value,
                                          0
                                          )
                             .Build().Value;

                    table.AddItem("P1", epochSat.FrequenceA.PseudoRange.Value);
                    table.AddItem("P2", epochSat.FrequenceB.PseudoRange.Value);
                    table.AddItem("PS", PS);
                }
            }

            BindDataSource(table);
        }