protected override void Run(string[] obsPathes) { // var satEleDir = fileOpenControl_satElevation.FilePath;// @"D:\Data\2013[甘肃CORS数据]\1103\GpsOnly\GPS卫星高度角\"; var pppResults = fileOpenControl_pppResults.GetFilePathes("_Params" + Setting.TextTableFileExtension);// Directory.GetFiles(satEleDir); var angleCut = double.Parse(textBox_angleCut.Text); var abmiResultInCycle = PppTableResultFileReader.ReadPppAmbiResultInCycle(pppResults); var SatElevatoinTableBuilder = new SatElevatoinTableBuilder(obsPathes, SatelliteTypes, Interval); var satEleTables = SatElevatoinTableBuilder.Build(); var mw = new MwTableBuilder(obsPathes, AngleCut, namedIntControl_emptyRowCount.Value, OutputDirectory, this.SatelliteTypes).Build(); PeriodPrnManager PeriodPrnManager = BuildPeriodBasePrn(satEleTables); MultiPeriodBsdProductSolver solver = new MultiPeriodBsdProductSolver(abmiResultInCycle, mw, PeriodPrnManager); solver.MaxAllowedDiffer = namedFloatControl1maxAllowedDiffer.Value; solver.IsOutputFraction = IsOutputFraction; solver.IsOutputInt = IsOutputInt; solver.IsOutputSummary = IsOutputSummary; solver.Run(); //var solver = new BsdAmbiSolver(obsPathes, pppResults, this.SatelliteTypes[0], angleCut, namedIntControl_minSiteCount.Value, this.namedIntControl_minEpoch.Value, OutputDirectory); //solver.Run(); }
/// <summary> /// 打开卫星高度角窗口 /// </summary> /// <param name="FilePath"></param> public static void OpenSatElevationTableForm(object FilePath) { var table = SatElevatoinTableBuilder.BuildTable((string)FilePath, 10); Application.Run(new TableObjectViewForm(table));//保证在线程中也可以显示 //TableObjectViewForm form = new TableObjectViewForm(table); // form.Show(); }
private ObjectTableStorage GetSatEleTable(string[] inputPathes) { ObjectTableStorage satEleTable = null; bool isInputCoord = this.checkBox_inputCoord.Checked; var cutOffAngle = namedFloatControl1AngleCut.GetValue(); if (!isInputCoord) { log.Info("采用了文件输入高度角"); if (inputPathes.Length == 0) { Geo.Utils.FormUtil.ShowWarningMessageBox("请输入文件"); return(satEleTable); } var baseSiteEle = inputPathes[0]; if (baseSiteEle.ToLower().EndsWith(Setting.SatElevationFileExtension.ToLower())) { var reader = new ObjectTableReader(baseSiteEle); satEleTable = reader.Read(); } else if (baseSiteEle.ToLower().EndsWith("rnx") || baseSiteEle.ToLower().EndsWith("o"))//O文件 { satEleTable = SatElevatoinTableBuilder.BuildTable(baseSiteEle, cutOffAngle, GlobalNavEphemerisService.Instance); } } else//手动输入 { log.Info("即将跟输入计算高度角信息"); //输出的采样间隔 TimeLooper looper = timeLoopControl1.GetTimeLooper(); var xyz = XYZ.Parse(this.namedStringControl_coord.GetValue()); satEleTable = SatElevatoinTableBuilder.BuildTable(looper, xyz, this.SatelliteTypes, cutOffAngle, GlobalNavEphemerisService.Instance, "卫星高度角"); } return(satEleTable); }
protected override void Run(string[] inputPathes) { string navFile = fileOpenControl_nav.GetFilePath(); //输出的采样间隔 TimeLooper looper = timeLoopControl1.GetTimeLooper(); var builder = new SatElevatoinTableBuilder(inputPathes, this.SatelliteTypes, looper, namedFloatControl1AngleCut.Value); builder.OutputDirectory = this.OutputDirectory; builder.ProgressViewer = this.ProgressBar; if (File.Exists(navFile)) { var ephService = EphemerisDataSourceFactory.Create(navFile); builder.EphemerisService = ephService; log.Info("采用了星历服务 " + ephService); } var tableMgr = builder.Build(); if (checkBox_enableStatistics.Checked) { int angleStep = 10; var table = tableMgr.First; #region 卫星历元数统计 var eleTable = new ObjectTableStorage(table.Name + "_不同高度截止角的历元数量统计"); for (int i = 0; i <= 30; i = i + angleStep) { eleTable.NewRow(); eleTable.AddItem("Elevation", i); var count = table.GetCount(new Func <double, bool>(val => val >= i)); eleTable.AddItem(count); eleTable.EndRow(); } #endregion #region 卫星颗数统计 var rowCountDics = new Dictionary <int, Dictionary <DateTime, int> >(); for (int i = 0; i <= 30; i = i + angleStep) { rowCountDics[i] = table.GetEachRowCount <DateTime>(new Func <double, bool>(val => val >= i)); } var satCountTable = new ObjectTableStorage(table.Name + "_可用卫星数量统计"); var first = rowCountDics[0]; foreach (var item in first) { var index = item.Key; satCountTable.NewRow(); satCountTable.AddItem("Epoch", index); foreach (var rows in rowCountDics) { var val = rows.Value[index]; satCountTable.AddItem(rows.Key, val); } satCountTable.EndRow(); } #endregion #region 卫星连续历元数统计 var maxValTable = new ObjectTableStorage(table.Name + "_最大数据统计"); var maxSequentialCountTable = new ObjectTableStorage(table.Name + "_最大连续历元数量统计"); var minSequentialCountTable = new ObjectTableStorage(table.Name + "_最小连续历元数量统计"); var satPeriodCountTable = new ObjectTableStorage(table.Name + "_卫星出现次数统计"); for (int i = 0; i <= 30; i = i + angleStep) { maxSequentialCountTable.NewRow(); maxSequentialCountTable.AddItem("Elevation", i); minSequentialCountTable.NewRow(); minSequentialCountTable.AddItem("Elevation", i); satPeriodCountTable.NewRow(); satPeriodCountTable.AddItem("Elevation", i); maxValTable.NewRow(); maxValTable.AddItem("Elevation", i); var dic = table.GetSequentialCountOfAllCol <DateTime>(new Func <double, bool>(val => val >= i)); foreach (var item in dic) { item.Value.Sort(new Comparison <Segment <DateTime> >((one, two) => (int)((two.End - two.Start) - (one.End - one.Start)).TotalSeconds)); //最大时段 var max = item.Value[0]; var maxSpan = (max.End - max.Start).TotalHours; maxSequentialCountTable.AddItem(item.Key, maxSpan); //最大值 var maxval = table.GetMaxValue(item.Key, max.Start, max.End); maxValTable.AddItem(item.Key, maxval); //最小时段 var lastIndex = item.Value.Count - 1; var min = item.Value[lastIndex]; var minSpan = (min.End - min.Start).TotalHours; if (lastIndex == 0) { minSpan = 0; } minSequentialCountTable.AddItem(item.Key, minSpan); //时段次数输出 satPeriodCountTable.AddItem(item.Key, item.Value.Count); } maxValTable.EndRow(); maxSequentialCountTable.EndRow(); minSequentialCountTable.EndRow(); satPeriodCountTable.EndRow(); } #endregion if (checkBox_sortPrnSatistics.Checked) { maxValTable.SortColumns(); eleTable.SortColumns(); maxSequentialCountTable.SortColumns(); minSequentialCountTable.SortColumns(); satPeriodCountTable.SortColumns(); } tableMgr.Add(maxValTable); tableMgr.Add(satCountTable); tableMgr.Add(eleTable); tableMgr.Add(maxSequentialCountTable); tableMgr.Add(minSequentialCountTable); tableMgr.Add(satPeriodCountTable); } BindTableA(tableMgr.First); tableMgr.WriteAllToFileAndClearBuffer(tableMgr.First); }