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; } }
/// <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); }
/// <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(); } }
/// <summary> /// 构造函数 /// </summary> /// <param name="TimeSpan"></param> public MultiPeriodSiteLineManager(TimeSpan TimeSpan) { SiteManager = new MultiPeriodObsFileManager(TimeSpan); BaseLineManager = new MutliPeriodBaseLineManager(TimeSpan); }