Beispiel #1
0
        private void InitSolverCount(MutliPeriodBaseLineManager LineManager)
        {
            CompletedSolverCount = 0;
            CurrentSolverCount   = 0;

            switch (AutoBaseLinSolveType)
            {
            case AutoBaseLinSolveType.单一算法:
                CurrentSolverCount = LineManager.Count;
                break;

            case AutoBaseLinSolveType.基线长度采用不同算法:
                CurrentSolverCount = 0;
                foreach (var item in LineManager.KeyValues)
                {
                    var sitebaseLines = item.Value.Values;
                    var netTimePeriod = item.Key;

                    List <SiteObsBaseline> shorts = item.Value.GetShortLines(MaxShortLineLength);
                    //短基线
                    if (shorts.Count > 0)
                    {
                        CurrentSolverCount++;
                    }
                    //长基线
                    if (shorts.Count < item.Value.Count)
                    {
                        CurrentSolverCount++;
                    }
                }
                break;

            default: break;
            }
        }
Beispiel #2
0
        /// <summary>
        /// 提取时段
        /// </summary>
        /// <param name="sitebaseLines"></param>
        /// <returns></returns>
        public MutliPeriodBaseLineManager ExtractPeriodLines(List <SiteObsBaseline> sitebaseLines)
        {
            var newPeriod = new MutliPeriodBaseLineManager(this.MinEpochTimeSpan);

            foreach (var item in this.Keys)
            {
                newPeriod.GetOrCreate(item);
            }
            foreach (var line in sitebaseLines)
            {
                foreach (var item in newPeriod.KeyValues)
                {
                    var inter = item.Key.GetIntersect(line.TimePeriod);
                    if (inter == null)
                    {
                        continue;
                    }
                    if (inter.TimeSpan > MinEpochTimeSpan)
                    {
                        newPeriod[item.Key].Add(line);
                        break;
                    }
                }
            }
            newPeriod.RemoveEmptyPeriods();
            return(newPeriod);
        }
Beispiel #3
0
        /// <summary>
        /// 解算
        /// </summary>
        /// <param name="LineManager"></param>
        public void Solve(MutliPeriodBaseLineManager LineManager)
        {
            SitebaseLines = LineManager.AllLineObjs;
            if (ProgressViewer != null)
            {
                ProgressViewer.InitProcess(LineManager.Count);
            }

            InitSolverCount(LineManager);

            //分时段计算 ,时段之间采用串行算法
            foreach (var item in LineManager.KeyValues)
            {
                var sitebaseLines = item.Value.Values;
                var netTimePeriod = item.Key;

                switch (AutoBaseLinSolveType)
                {
                case AutoBaseLinSolveType.单一算法:
                {
                    SolveBaseLine(sitebaseLines, Option, netTimePeriod);
                }
                break;

                case AutoBaseLinSolveType.基线长度采用不同算法:
                {
                    //长基线解算
                    var longOption = Options[GnssSolverType.无电离层双差];
                    //长基线
                    List <SiteObsBaseline> shorts    = item.Value.GetShortLines(MaxShortLineLength);
                    List <SiteObsBaseline> longLines = item.Value.GetLongLines(MaxShortLineLength);

                    if (longLines.Count > 0)
                    {
                        SolveBaseLine(longLines, longOption, netTimePeriod);
                    }
                    //短基线
                    if (shorts.Count > 0)
                    {
                        SolveBaseLine(shorts, Option, netTimePeriod);
                    }
                }
                break;

                default:
                {
                    SolveBaseLine(sitebaseLines, Option, netTimePeriod);
                }
                break;
                }

                ProgressViewer.PerformProcessStep();
            }
            if (ProgressViewer != null)
            {
                ProgressViewer.Full();
            }
        }
Beispiel #4
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="TimeSpan"></param>
 public MultiPeriodSiteLineManager(TimeSpan TimeSpan)
 {
     SiteManager     = new MultiPeriodObsFileManager(TimeSpan);
     BaseLineManager = new MutliPeriodBaseLineManager(TimeSpan);
 }