예제 #1
0
        /// <summary>
        /// 处理过程
        /// </summary>
        /// <param name="obs">观测数据</param>
        /// <returns></returns>
        public override bool Revise(ref EpochInformation obs)
        {
            foreach (var item in obs)
            {
                SatSequentialPeriod.AddTimePeriod(item.Prn, item.Time.Value);
            }

            return(true);
        }
예제 #2
0
        /// <summary>
        /// 处理过程
        /// </summary>
        /// <param name="obs">观测数据</param>
        /// <returns></returns>
        public override bool Revise(ref EpochInformation epochInfo)
        {
            if (epochInfo == null)
            {
                return(false);
            }

            // obsBuilder.Revise(ref epochInfo);

            foreach (var sat in epochInfo)
            {
                if (sat.IsUnstable)
                {
                    SatSequentialPeriod.AddTimePeriod(sat.Prn, sat.Time.Value);
                }
            }
            return(true);
        }
예제 #3
0
        /// <summary>
        /// 处理过程
        /// </summary>
        /// <param name="obs">观测数据</param>
        /// <returns></returns>
        public override bool Revise(ref EpochInformation obs)
        {
            epochCount++;
            //入队后再说
            EpochInfoBuffer.Enqueue(obs);

            if (obs == null)
            {
                return(false);
            }
            var prns = obs.EnabledPrns;

            //首先,初始化,标记第一次出现的卫星为连续。
            foreach (var prn in prns)
            {
                if (!SatCounters.ContainsKey(prn))
                {
                    var marker = new SatMarker(prn, obs.ReceiverTime);
                    SatCounters[prn] = marker;
                }
            }

            //其次,标记,遍历所有记录的卫星,检查其是否连续,并进行标记,这一步只是简单的记录。
            foreach (var prn in SatCounters.Keys)
            {
                var maker = SatCounters[prn];
                //如果本历元有,则标记之为有,连续数增加,断开数量清零
                //可能:首次出现;继续出现
                if (prns.Contains(prn))
                {
                    if (maker.GapCount > 0)//首次出现,之前为断开
                    {
                        //记录此断开时段
                        SatSequentialPeriod.AddTimePeriod(prn, new BufferedTimePeriod(maker.StartRecordTime, obs.ReceiverTime));
                        maker.StartRecordTime = obs.ReceiverTime;
                    }
                    if (maker.SequenceCount == 0)
                    {
                        maker.StartRecordTime = obs.ReceiverTime;
                    }

                    maker.SequenceCount++;
                    maker.GapCount = 0;
                    maker.Mark     = true;
                }
                else//如果本历元无,则标记为没有,断开数增加
                {
                    //可能:首次出现,继续出现
                    // maker.SequenceCount = 0;

                    if (maker.SequenceCount < MinSequenceCount)//首次断开,之前为连续,且连续数量太少,认为可以移除
                    {
                        //记录此断开时段
                        SatSequentialPeriod.AddTimePeriod(prn, new BufferedTimePeriod(maker.StartRecordTime, obs.ReceiverTime));
                        maker.StartBreakingTime = obs.ReceiverTime;//.Time.Value;
                    }

                    if (maker.GapCount == 0)
                    {
                        maker.StartBreakingTime = obs.ReceiverTime;
                    }
                    maker.SequenceCount = 0;
                    maker.GapCount++;
                    maker.Mark = false;
                }
            }



            ////记录本历元没有标记的,即断开的,要求断开数量大于指定最大
            //foreach (var maker in SatCounters.Values)
            //{
            //    if (!maker.Mark &&( maker.SequenceCount <= MinSequenceCount || maker.GapCount >= this.MaxAllowedGap ))
            //    {
            //        SatPeriodInfoManager.AddTimePeriod(maker.Prn, new BufferedTimePeriod(maker.StartRecordTime, obs.Time.Value));
            //    }
            //    maker.SequenceCount = 0;
            //}

            return(true);
        }