예제 #1
0
        /// <summary>
        /// 预处理
        /// </summary>
        /// <param name="epoch"></param>
        public override void PreProcess(EpochInformation epoch)
        {
            epoch.RemoveIonoFreeUnavailable();

            //预处理
            var tobeDeletes = new List <SatelliteNumber>();

            foreach (var sat in epoch)
            {
                if (!IsValid(sat) || !SatelliteTypes.Contains(sat.Prn.SatelliteType))
                {
                    tobeDeletes.Add(sat.Prn);
                }
            }
            epoch.Remove(tobeDeletes);
            tobeDeletes.Clear();


            foreach (var sat in epoch)
            {
                if (!IsValid(sat) || !SatelliteTypes.Contains(sat.Prn.SatelliteType))
                {
                    continue;
                }
                var prn = sat.Prn;

                var eph = EphemerisService.Get(sat.Prn, sat.ReceiverTime);
                if (eph == null)
                {
                    tobeDeletes.Add(sat.Prn);
                    continue;
                }
                sat.Ephemeris = eph;
                if (sat.GeoElevation < AngleCut)
                {
                    tobeDeletes.Add(sat.Prn);
                    continue;
                }

                //C1 改为 P1
                DcbRangeCorrector.Correct(sat);
                //周跳探测
                //sat.IsUnstable = Detector.Detect(sat);
            }

            epoch.Remove(tobeDeletes);
            tobeDeletes.Clear();
        }
예제 #2
0
        /// <summary>
        /// 处理一个
        /// </summary>
        /// <param name="epoch"></param>
        public void Process(EpochInformation epoch)
        {
            Time time = epoch.ReceiverTime;

            //计算
            foreach (var sat in epoch)
            {
                if (!IsValid(sat) || !SatelliteTypes.Contains(sat.Prn.SatelliteType) || sat.Ephemeris == null)
                {
                    continue;
                }
                var prn = sat.Prn;

                double mwValue = sat.Combinations.MwPhaseCombinationValue;

                var weight = 1.0;
                if (sat.Polar.Elevation < 30)
                {
                    weight = 2 * Math.Sin(sat.GeoElevation * Geo.Coordinates.AngularConvert.DegToRadMultiplier);
                }

                var windowData = WindowDataManager.GetOrCreate(prn);

                //弧段断裂,求值
                if (sat.IsUnstable || windowData.IsKeyBreaked(time))
                {
                    CheckBuildPeriodResultAndClear(windowData, prn);
                }

                windowData.Add(time, new WeightedNumeral(mwValue, weight));
            }


            //每一历元结束,都做一次判断,确保数据完全输出
            foreach (var item in WindowDataManager.Data)
            {
                var prn        = item.Key;
                var windowData = WindowDataManager.GetOrCreate(prn);

                //弧段断裂,求值
                if (windowData.IsKeyBreaked(time))
                {
                    CheckBuildPeriodResultAndClear(windowData, prn);
                }
            }
        }