Exemple #1
0
        /// <summary>
        /// 提取一个测站所有时段卫星的MW平均值,作为具有卫星和接收机硬件延迟的宽巷模糊度。
        /// 此处假定时段内卫星和接收机硬件延迟变化可以忽略不计。
        /// </summary>
        /// <returns></returns>
        public MultiSatPeriodRmsNumeralStorage Build()
        {
            Init();

            foreach (var epoch in BuffferStream)
            {
                //简单的质量控制
                if (epoch == null)
                {
                    continue;
                }

                Run(epoch);
            }//end of stream

            //最后,将最后的窗口数据进行检查输出
            foreach (var item in WindowDataManager.Data)
            {
                var prn        = item.Key;
                var windowData = WindowDataManager.GetOrCreate(prn);

                CheckBuildPeriodResultAndClear(windowData, prn);
            }

            this.OnCompleted();

            return(Result);
        }
        /// <summary>
        /// 过滤掉小历元时段,在缓存中操作,确保缓存大于断裂数量
        /// </summary>
        /// <param name="info"></param>
        private void CheckAndFiltSmallSpan(EpochInformation info)
        {
            //添加
            foreach (var sat in info)
            {
                WindowDataManager.GetOrCreate(sat.Prn).Add(info.ReceiverTime);
            }
            ////保证有足够的数量
            //if (!WindowDataManager.HasFull) { return; }

            JudgeAndFiltSmallSpanInBuffer(info.ReceiverTime, info.ReceiverTime == LastEpoch);
        }
Exemple #3
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);
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// 过滤掉小历元时段,在缓存中操作,确保缓存大于断裂数量
        /// </summary>
        /// <param name="info"></param>
        private void CheckAndFiltSmallSpan(RinexEpochObservation info)
        {
            //是否启用
            if (!this.Option.IsEnableMinEpochCount)
            {
                return;
            }

            //添加
            foreach (var sat in info)
            {
                WindowDataManager.GetOrCreate(sat.Prn).Add(info.ReceiverTime);
            }
            ////保证有足够的数量
            //if (!WindowDataManager.HasFull) { return; }

            JudgeAndFiltSmallSpanInBuffer(info.ReceiverTime, info.ReceiverTime == LastEpoch);
        }