/// <summary> /// 构造函数 /// </summary> /// <param name="pathes"></param> public WideLaneOfBsdSolver(ObjectTableManager SmoothedMwValue, SatelliteNumber BasePrn, int MinSiteCount, int MinEpoch, string OutputDirectory = null) : base("WL", BasePrn, OutputDirectory) { this.MinSiteCount = MinSiteCount; this.MinEpoch = MinEpoch; this.SmoothedMwValue = SmoothedMwValue; }
/// <summary> /// 读取PPP模糊度结果,单位:米 /// </summary> /// <param name="inputPathes"></param> /// <param name="isRemoveCsPrn"></param> /// <returns></returns> public static ObjectTableManager ReadPppAmbiResultInLength(string[] inputPathes, bool isRemoveCsPrn) { //读取PPP定位结果,主要为提取模糊度参数,这里注意原始为以米为单位, var rawPppResultTables = ObjectTableManager.Read(inputPathes); //对读入的PPP结果文件做一些必要的处理 //去掉表名称的“_Params”,读入时,已经去掉了。 //rawPppResultTables.ReplaceTableName("_Params", ""); //首先删除无关历元和列 rawPppResultTables.SetIndexColName("Epoch"); var smartTalbes = rawPppResultTables.GetRepalcedColNameTable(new string[] { ParamNames.PhaseLengthSuffix, "_Nλ", "_N位", "_位N" }); //后者为字符编码错误 //移除周跳的卫星 if (isRemoveCsPrn) { RemoveCycleSlipedSat(smartTalbes); } foreach (var item in smartTalbes) { item.RemoveCols(new string[] { "CycleSlipe", Gnsser.ParamNames.Du, Gnsser.ParamNames.De, Gnsser.ParamNames.Dn, Gnsser.ParamNames.Dx, Gnsser.ParamNames.Dy, Gnsser.ParamNames.Dz, "cDt_r", "C*dtr", "StdDev", "WetTrop" }); // 删除不参与计算的无关列 //key.RemoveEmptyRowsOf(BasePrn + "_Nλ"); // 删除没有基准数据的行 //key.RemoveEmptyCols(); //删除空行 } return(smartTalbes); }
/// <summary> /// 获取表格 /// </summary> /// <param name="outDirectory"></param> /// <returns></returns> public ObjectTableManager GetTable(string outDirectory, SatelliteNumber basePrn) { log.Info("开始提取表格 " + this.Name); DateTime start = DateTime.Now; ObjectTableManager result = new ObjectTableManager(outDirectory); foreach (var epochVals in this.Data) { foreach (var satVals in epochVals.Value.Data) { var prn = satVals.Key; if (satVals.Value.Count == 0) { continue; } var talbe = result.GetOrCreate(prn + "-" + basePrn); talbe.NewRow(); talbe.AddItem("Epoch", epochVals.Key); talbe.AddItem(satVals.Value); } } var span = DateTime.Now - start; log.Info("提取表格完毕,耗时: " + span); return(result); }
/// <summary> /// 构造函数 /// </summary> /// <param name="IsUseGNSSerSmoothRangeMethod"></param> /// <param name="ObsDataType"></param> /// <param name="WindowSize"></param> /// <param name="isWeighted"></param> /// <param name="FrequenceTypes"></param> /// <param name="isDeltaIonoFit"></param> /// <param name="OrderOfDeltaIonoPolyFit"></param> /// <param name="BufferSize"></param> /// <param name="ionoFitEpochCount"></param> /// <param name="SmoothRangeType"></param> /// <param name="IndicatedIonoDeltaFilePath"></param> public SingleFreqSelfIonoRangeReviser( bool IsUseGNSSerSmoothRangeMethod, SatObsDataType ObsDataType, int WindowSize, bool isWeighted, List <FrequenceType> FrequenceTypes, IonoDifferCorrectionType isDeltaIonoFit, int OrderOfDeltaIonoPolyFit, int BufferSize, int ionoFitEpochCount, SmoothRangeSuperpositionType SmoothRangeType, string IndicatedIonoDeltaFilePath) { this.Name = "单频电离层自我改正"; this.ObsDataType = ObsDataType; this.FrequenceTypes = FrequenceTypes; this.PhaseSmoothedRangeBuilderManager = new CarrierSmoothedRangeBuilderManager( IsUseGNSSerSmoothRangeMethod, WindowSize, isWeighted, isDeltaIonoFit, OrderOfDeltaIonoPolyFit, BufferSize, ionoFitEpochCount, SmoothRangeType) { IndicatedIonoDeltaFilePath = IndicatedIonoDeltaFilePath }; this.IsDualIonoFree = this.ObsDataType == SatObsDataType.IonoFreePhaseRange || this.ObsDataType == SatObsDataType.IonoFreeRange; this.Data = new BaseDictionary <SatelliteNumber, TimeNumeralWindowData>("数据", new Func <SatelliteNumber, TimeNumeralWindowData>(prn => new TimeNumeralWindowData(WindowSize) )); TableObjectStorages = new ObjectTableManager(); TableObjectStorage = TableObjectStorages.AddTable("模糊度概略距离值"); log.Info("启用:" + this.Name + " 对观测值进行改正!是否双频:" + IsDualIonoFree); }
/// <summary> /// 构建基准星时段对象。 /// </summary> /// <param name="satEleTables"></param> /// <returns></returns> private PeriodPrnManager BuildPeriodBasePrn(ObjectTableManager satEleTables) { PeriodPrnManager PeriodPrnManager = null; var minSat = namedIntControl_minSiteCount.GetValue(); var minEpoch = namedIntControl_minEpoch.GetValue(); var baseSiteEle = fileOpenControl_satEleOfBaseSite.FilePath; if (baseSiteEle.Contains("SatEle.xls")) { ObjectTableReader reader = new ObjectTableReader(baseSiteEle); var satEleTable = reader.Read(); log.Info("成功读取卫星高度角文件"); PeriodFixedSatSelector BasePrnSelector = new PeriodFixedSatSelector(satEleTable, namedFloatControl1AngleCut.Value, TimePeriodCount, IsExpandPeriodOfSameSat); PeriodPrnManager = BasePrnSelector.Select(); } else if (baseSiteEle.Contains(".xls")) { PeriodPrnManager = PeriodPrnManager.ReadFromFile(baseSiteEle); } else { PeriodPrnManager = new PeriodFixedSatSelector(satEleTables.First, namedFloatControl1AngleCut.Value, TimePeriodCount, IsExpandPeriodOfSameSat).Select(); } return(PeriodPrnManager); }
/// <summary> /// 读取到历元存储对象 /// </summary> /// <param name="tables"></param> /// <returns></returns> public static MultiSiteEpochValueStorage ReadToEpochStorage(ObjectTableManager tables) { MultiSiteEpochValueStorage multiSiteStorage = new MultiSiteEpochValueStorage("无电离层双差结果"); foreach (var table in tables) { MultiSatEpochRmsNumeralStorage multiSatStorage = multiSiteStorage.GetOrCreate(table.Name); var indexName = table.GetIndexColName(); foreach (var row in table.BufferedValues) { var epoch = (Time)row[indexName]; foreach (var item in row) { if (item.Key == indexName) { continue; } var prn = SatelliteNumber.Parse(item.Key); var val = (double)item.Value; multiSatStorage.GetOrCreate(epoch).Add(prn, new RmsedNumeral(val, 0)); } } } return(multiSiteStorage); }
protected override void Run(string[] inputPathes) { var SmoothedMwValue = ObjectTableManager.Read(inputPathes); WideLaneOfBsdSolver solver = null; var espan = enabledTimePeriodControl1.GetEnabledValue(); if (espan.Enabled) { var span = espan.Value; SmoothedMwValue = SmoothedMwValue.GetSub(span.StartDateTime, span.EndDateTime); } solver = new WideLaneOfBsdSolver(SmoothedMwValue, BasePrn, namedIntControl_minSiteCount.Value, this.namedIntControl_minEpoch.Value, OutputDirectory); solver.Run(); this.BindTableA(solver.FractionValueTables.First); //输出 if (this.checkBox_outputInt.Checked) { solver.IntValueTables.WriteAllToFileAndClearBuffer(); } if (this.checkBox_outputFraction.Checked) { solver.FractionValueTables.WriteAllToFileAndClearBuffer(solver.FractionValueTables.First); } if (this.checkBox_outputSumery.Checked) { solver.SummeryTables.WriteAllToFileAndClearBuffer(); } }
private void button_xyzToNeu_Click(object sender, EventArgs e) { try { List <XYZ> originEcefXyz = GetOriginEcefXyz(); List <XYZ> targetEcefXyz = GetTargetEcefXyz(); ObjectTableManager manager = new ObjectTableManager(); var table = manager.AddTable("ENU"); int count = originEcefXyz.Count; for (int i = 0; i < count; i++) { var oXyz = originEcefXyz[i]; var tXyz = targetEcefXyz[i]; var enu = CoordTransformer.XyzToEnu(tXyz, oXyz); table.NewRow(); table.AddItem("Index", i); table.AddItem("E", enu.E); table.AddItem("N", enu.N); table.AddItem("U", enu.U); } this.objectTableControl1.DataBind(table); }catch (Exception ex) { Geo.Utils.FormUtil.ShowErrorMessageBox(ex.Message); } }
/// <summary> /// 移除周跳卫星结果 /// </summary> /// <param name="smartTalbes"></param> private static void RemoveCycleSlipedSat(ObjectTableManager smartTalbes) { var csKey = "CsOrRemoved"; foreach (var table in smartTalbes) { foreach (var row in table.BufferedValues) { if (row.ContainsKey(csKey)) { var csStr = row[csKey].ToString(); var prns = csStr.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries); var keysToBeRemoved = new List <string>(); foreach (var prn in prns) { foreach (var key in row.Keys) { if (key.Contains(prn)) { keysToBeRemoved.Add(key); } } } foreach (var item in keysToBeRemoved) { row.Remove(item); } } } } }
protected override void Run(string[] inputPathes) { ObjectTableStorage satEleTable = GetSatEleTable(inputPathes); if (satEleTable == null) { return; } this.BindTableC(satEleTable); log.Info("成功读取卫星高度角文件"); AbstractPeriodBaseSatSelector BasePrnSelector = null; PeriodPrnManager PeriodPrnManager = null; string detailTableName = "BasePrnChainDetails"; if (!IsFlexibleSegmentaion) { var type = enumRadioControl1.GetCurrent <BaseSatSelectionType>(); detailTableName += "Of" + type + "_" + TimePeriodCount + "Count"; BasePrnSelector = new PeriodFixedSatSelector(satEleTable, namedFloatControl1AngleCut.Value, TimePeriodCount, IsExpandPeriodOfSamePrn, type); } else { detailTableName += "OfFlexible_" + namedFloatControl1AngleCut.Value + "deg"; BasePrnSelector = new FlexiblePeriodSatSelector(satEleTable, namedFloatControl1AngleCut.Value); } PeriodPrnManager = BasePrnSelector.Select(); var outPath = Path.Combine(this.OutputDirectory, Setting.GnsserConfig.BasePrnFileName); PeriodPrnManager.WriteToFile(outPath); //基准星接力 var mgr = new ObjectTableManager(this.OutputDirectory); var basePrnChain = mgr.AddTable(detailTableName); foreach (var item in PeriodPrnManager) { var vector = satEleTable.GetColObjectDicByObjIndex(item.Value.ToString(), item.TimePeriod.Start, item.TimePeriod.End); if (vector != null) { foreach (var prnVal in vector) { basePrnChain.NewRow(); basePrnChain.AddItem("Epoch", prnVal.Key); basePrnChain.AddItem(item.Value.ToString(), prnVal.Value); basePrnChain.EndRow(); } } } this.BindTableA(basePrnChain); this.BindTableB(BasePrnSelector.DetailResultTable); mgr.Add(BasePrnSelector.DetailResultTable); mgr.WriteAllToFileAndCloseStream(); var text = mgr.First.GetTextTable();// PeriodPrnManager.GetText(); ShowInfo(text); }
private BaseLineNetManager LoadBaseLineNets() { var tables = ObjectTableManager.Read(InputBaselinePathes, "."); var table = tables.Combine(); //合并所有的表格 var BaseLineNet = BaseLineNetManager.Parse(table, periodSpanMinutes); //时段网 return(BaseLineNet); }
/// <summary> /// 构造函数 /// </summary> /// <param name="Directory"></param> /// <param name="Name"></param> public AioAdjustFileBuilder(string Directory, string Name = "平差文件") { AdjustTables = new ObjectTableManager(Directory); if (!String.IsNullOrWhiteSpace(Name)) { AdjustTables.Name = Name; } }
/// <summary> /// 提取异步GNSS网 /// </summary> /// <param name="pathes"></param> /// <param name="periodSpanMinutes">不同时段间隔,间隔内认为是同一时段,单位:分</param> /// <returns></returns> public static BaseLineNetManager Load(string[] pathes, double periodSpanMinutes) { var tables = ObjectTableManager.Read(pathes, "."); //合并所有的表格 var table = tables.Combine(); var phaselNets = BaseLineNetManager.Parse(table, periodSpanMinutes);//时段网 return(phaselNets); }
/// <summary> /// 构造函数 /// </summary> /// <param name="BasePrn">基准卫星</param> /// <param name="FloatAmbiSolution">PPP模糊度浮点解,未做差分,单位为周。</param> /// <param name="IntValueOfDifferWL">宽巷MW差分值,整型。</param> public NarrowLaneOfBsdSolver(SatelliteNumber BasePrn, ObjectTableManager FloatAmbiSolution, ObjectTableManager IntValueOfDifferWL, string OutputDirectory, bool IsPppAmbiInCycleOrLen = true) : base("NL", BasePrn, OutputDirectory) { this.FloatAmbiSolution = FloatAmbiSolution; this.IntValueOfDifferWL = IntValueOfDifferWL; this.OutputDirectory = OutputDirectory; this.IsPppAmbiInCycleOrLen = IsPppAmbiInCycleOrLen; Init(); }
/// <summary> /// 构造函数。基于表对象。 /// </summary> /// <param name="SmoothedMwValue"></param> /// <param name="PeriodPrnManager"></param> /// <param name="OutputDirectory"></param> public MultiPeriodBsdProductSolver(ObjectTableManager FloatAmbiguitiesOfPpp, ObjectTableManager SmoothedMwValue, PeriodPrnManager PeriodPrnManager, int minSite = 3, int minEpoch = 10, string OutputDirectory = null) { MaxAllowedDiffer = 0.25; this.MinSiteCount = minSite; this.MinEpoch = minEpoch; this.FloatAmbiguitiesOfPpp = FloatAmbiguitiesOfPpp; this.PeriodPrnManager = PeriodPrnManager; this.OutputDirectory = (OutputDirectory != null)? OutputDirectory : Setting.TempDirectory; this.SmoothedMwValue = SmoothedMwValue; }
/// <summary> /// 周跳探测,并进行标记,而不修复。 默认构造函数。 /// </summary> public MwCycleSlipDetectorOld() { MaxDeltaTime = 121; MaxNumLambdas = 10.0; lambdaLimit = MaxNumLambdas * 0.862; //limit to declare cycle slip based on lambdas( LambdaLW= 0.862 m) ,对于北斗,应该考虑 this.IsUsingRecordedCsInfo = true; CycleSlipStorage = new InstantValueStorage(); log.Debug("采用了MW方法探测周跳。"); TableObjectManager = new ObjectTableManager(); // satData = new SortedDictionary<SatelliteNumber, List<DataItem>>(); }
private void button_run_Click(object sender, EventArgs e) { //手动输入 double levelFixed = this.namedFloatControl_fixedErrorLevel.GetValue(); double verticalFixed = this.namedFloatControl_fixedErrorVertical.GetValue(); double levelCoeef = this.namedFloatControl_levelCoefOfProprotion.GetValue(); double verticalCoeef = this.namedFloatControl_verticalCoefOfProprotion.GetValue(); var GnssReveiverNominalAccuracy = new GnssReveiverNominalAccuracy(levelFixed, verticalFixed, levelCoeef, verticalCoeef); var periodSpanMinutes = this.namedFloatControl_periodSpanMinutes.GetValue(); var path = this.fileOpenControl_input.FilePath; if (!File.Exists(path)) { Geo.Utils.FormUtil.ShowWarningMessageBox("没有文件!在下无能为力!"); return; } var pathes = this.fileOpenControl_input.FilePathes; var tables = ObjectTableManager.Read(pathes, "."); //合并所有的表格 var rawTable = tables.Combine(); BaseLineNets = BaseLineNetManager.Parse(rawTable, periodSpanMinutes); //时段网 this.AllSychTrilateralQualities = BaseLineNets.BuildTriangularClosureQualies(GnssReveiverNominalAccuracy); //同步环闭合差计算 ObjectTableStorage totalSyncErrorTable = BaseLineNets.BuildSyncTrilateralErrorTable(AllSychTrilateralQualities); //复测基线较差,所有与第一个作差 var PeriodsRepeatErrors = BaseLineNets.BuildRepeatBaselineError(); var worst = PeriodsRepeatErrors.GetWorst(); if (worst != null) { StringBuilder sb = new StringBuilder(); sb.AppendLine("复测基线较差最弱边:" + worst.ToString()); this.richTextBoxControl_textResult.Text += "\r\n" + sb.ToString(); } this.PeriodsRepeatErrorslQualities = BaseLineNets.BuildRepeatBaselingQulities(PeriodsRepeatErrors, GnssReveiverNominalAccuracy); //生成所有表格 ObjectTableStorage repeatErrorTable = BaseLineNets.BuildRepeatBaselingErrorTable(PeriodsRepeatErrorslQualities, GnssReveiverNominalAccuracy); this.objectTableControl_syncclosureError.DataBind(totalSyncErrorTable); this.objectTableControl_closureErrorOfRepeatBaseline.DataBind(repeatErrorTable); this.objectTableControl_rawData.DataBind(rawTable); this.tabControl_res.SelectedTab = this.tabPage_allSync; }
/// <summary> /// 获取对象表 /// </summary> /// <returns></returns> public ObjectTableManager GetObjectTables() { ObjectTableManager ressult = new ObjectTableManager(); ressult.Name = this.Name; foreach (var eq in this) { ressult.AddTable(eq.GetObjectTables()); } return(ressult); }
/// <summary> /// 读取模糊度 /// </summary> /// <param name="inputPathes"></param> /// <param name="isRemoveCsPrn"></param> /// <param name="isInLenthOrCycle"></param> /// <param name="waveLen">如果设为周,则必须设定波长</param> /// <returns></returns> public static ObjectTableManager ReadAmbiResult(string[] inputPathes, bool isRemoveCsPrn, bool isInLenthOrCycle = false, double waveLen = 1) { ObjectTableManager smartTalbes = ReadAmbiResultInDefaultUnit(inputPathes, isRemoveCsPrn); if (!isInLenthOrCycle) { var abmiResultInCycle = smartTalbes.GetNewTableByDivision(waveLen, false, ""); return(abmiResultInCycle); } return(smartTalbes); }
private void button_exortTable_Click(object sender, EventArgs e) { if (objectTableControl1.TableObjectStorage == null) { return; } var TableManager = new ObjectTableManager(); TableManager.Add(objectTableControl1.TableObjectStorage); TableManager.WriteAllToFileAndCloseStream(); Geo.Utils.FormUtil.ShowIfOpenDirMessageBox(TableManager.OutputDirectory); }
private void button_outputOneTable_Click(object sender, EventArgs e) { CheckAndReadObsFile(); var table = new ObsFileToTableBuilder().Build(this.ObsFile); table.Name = System.IO.Path.GetFileNameWithoutExtension(this.ObsPath); ObjectTableManager mgr = new ObjectTableManager(Setting.GnsserConfig.TempDirectory); mgr.Add(table); mgr.WriteAllToFileAndClearBuffer(); Geo.Utils.FormUtil.ShowOkAndOpenDirectory(mgr.OutputDirectory); }
/// <summary> /// 用于显示 /// </summary> /// <returns></returns> public ObjectTableStorage GetLineTable() { ObjectTableManager tables = new ObjectTableManager(); foreach (var item in this.KeyValues) { var table = item.Value.GetLineTable(); tables[item.Key.ToDefualtPathString()] = table; } ObjectTableStorage result = tables.Combine(); return(result); }
/// <summary> /// 运行 /// </summary> public override void Run() { //----------基于测站-------- //基于测站的MW星间单差,消除了测站硬件延迟 log.Debug("基于测站的MW星间单差"); this.SiteDifferMwTables = SmoothedMwValue.GetNewByMinusCol(BasePrn + "", "", true); //----------基于卫星--------- //基于卫星的MW星间单差,各个测站针对同一卫星差分值显示在同一个表格中 this.FloatValueTables = SiteDifferMwTables.GetSameColAssembledTableManager("FloatOf" + ProductTypeMarker); //生成结果,包括一些数据过滤工作 base.BuildProducts(); }
/// <summary> /// 基线表 /// </summary> /// <returns></returns> public ObjectTableStorage GetLineTable() { int netIndex = 0; ObjectTableManager tableObjects = new ObjectTableManager(); foreach (var item in this) { var table = item.GetLineTable(); table.Name += netIndex + "_net"; tableObjects.Add(table); netIndex++; } return(tableObjects.Combine()); }
protected override void Run(string inputPath) { base.Run(inputPath); var obsFileReader = new RinexObsFileReader(inputPath); var ObsFile = obsFileReader.ReadObsFile(); var table = new ObsFileToTableBuilder().Build(ObsFile); ObjectTableManager mgr = new ObjectTableManager(this.OutputDirectory); mgr.Add(table); mgr.WriteAllToFileAndClearBuffer(); // Geo.Utils.FormUtil.ShowOkAndOpenDirectory(mgr.OutputDirectory); }
/// <summary> /// 构造函数 /// </summary> /// <param name="AdjustmentType"></param> /// <param name="OutDirectory"></param> /// <param name="ProgressNotifier"></param> public CommonFileAdjuster(AdjustmentType AdjustmentType = AdjustmentType.卡尔曼滤波, string OutDirectory = null, IProgressViewer ProgressNotifier = null) { if (String.IsNullOrWhiteSpace(OutDirectory)) { OutDirectory = Setting.TempDirectory; } this.OutDirectory = OutDirectory; Geo.Utils.FileUtil.CheckOrCreateDirectory(OutDirectory); this.AdjustmentType = AdjustmentType; ResultTables = new ObjectTableManager(OutDirectory); IsCancel = false; this.ProgressViewer = ProgressNotifier; adjuster = AdjusterFactory.Create(AdjustmentType); }
private void button_calculate_Click(object sender, EventArgs e) { if (calculater == null) { Geo.Utils.FormUtil.ShowWarningMessageBox("请先读取数据。"); return; } button_calculate.Enabled = false; UiToInitParams(); var dir = directorySelectionControl_output.Path; tables = new ObjectTableManager(dir); table = tables.AddTable("SphericalHarmonics"); backgroundWorker1.RunWorkerAsync(); }
/// <summary> /// 构造函数。 /// </summary> /// <param name="SmoothedMwValue"></param> /// <param name="PeriodPrnManager"></param> /// <param name="OutputDirectory"></param> public MultiPeriodWideLaneOfBsdSolver(ObjectTableManager SmoothedMwValue, PeriodPrnManager PeriodPrnManager, int minSat = 1, int minEpoch = 1, bool IsOutputInEachDirectory = false, string OutputDirectory = null) { this.MinSatCount = minSat; this.MinEpoch = minEpoch; this.PeriodPrnManager = PeriodPrnManager; if (OutputDirectory != null) { this.OutputDirectory = OutputDirectory; } else { this.OutputDirectory = Setting.TempDirectory; } this.SmoothedMwValue = SmoothedMwValue; this.IsOutputInEachDirectory = IsOutputInEachDirectory; }
private void ProduceAndShow(MultiSitePeriodValueStorage result) { //计算历元产品,可以查看变化。 var basePrn = baseSatSelectingControl1.SelectedPrn; if (basePrn.SatelliteType != SatelliteType.G) { MessageBox.Show("请选择GPS系统!目前似乎还不支持其它系统,如果支持了请尝试高版本先,若还没有请 Email To: [email protected]"); return; } var maxRms = namedFloatControl_maxRms.GetValue(); var outIntervalSec = namedFloatControl_intervalOFProduct.GetValue() * 60.0; var table = result.GetTable(); var product = result.GetProductTableOfAllDiffer(); var fracTable = result.GetAverageRoundFractionTable(); var detailTable = result.GetDetailTable(); var finalOne = result.GetFinalFcbOfBsd(BasePrn); var bsdProduct = result.GetWideLaneFcb(BasePrn); ObjectTableManager.WriteTable(table, this.OutputDirectory); ObjectTableManager.WriteTable(fracTable, this.OutputDirectory); ObjectTableManager.WriteTable(detailTable, this.OutputDirectory); ObjectTableManager.WriteTable(product, this.OutputDirectory); this.ShowInfo("Final wide fcb:\r\n" + Geo.Utils.StringUtil.ToString(finalOne)); this.BindTableA(table); this.BindTableB(product); this.BindTableC(fracTable); var differInts = result.GetAllPossibleDifferInts(); foreach (var item in differInts.GetData()) { var tab = item.Value.GetDetailTable(); //tab.Name = item.Key + "_宽巷星间单差整数"; tab.Name = item.Key + "_Bsd.WLInt"; ObjectTableManager.WriteTable(tab, this.OutputDirectory); } //计算归算的最终产品 WriteFinal(bsdProduct); WriteEpochProducts(result, basePrn, maxRms, outIntervalSec); Geo.Utils.FormUtil.ShowOkAndOpenDirectory(Setting.TempDirectory); }
/// <summary> /// 处理一个卫星 /// </summary> /// <param name="sectionMw"></param> /// <param name="basePrn"></param> /// <returns></returns> private void ProcessOneBaseSat(ObjectTableManager sectionMw, SatelliteNumber basePrn) { using (var wLSolver = new WideLaneOfBsdSolver(sectionMw, basePrn, MinSiteCount, MinEpoch, this.OutputDirectory)) { wLSolver.MaxAllowedDiffer = MaxAllowedDiffer; wLSolver.Run(); using (var nLSolver = new NarrowLaneOfBsdSolver(basePrn, FloatAmbiguitiesOfPpp, wLSolver.IntValueTables, this.OutputDirectory)) { nLSolver.MinEpoch = MinEpoch; nLSolver.MinSiteCount = MinSiteCount; nLSolver.MaxAllowedDiffer = MaxAllowedDiffer; nLSolver.Run(); TotalObsCountOfNL += nLSolver.TotalObsCount; if (this.IsOutputInt && nLSolver.IntValueTables != null) { nLSolver.IntValueTables.WriteAllToFileAndClearBuffer(); } if (this.IsOutputFraction && nLSolver.FractionValueTables != null) { nLSolver.FractionValueTables.WriteAllToFileAndClearBuffer(); } if (this.IsOutputSummary && nLSolver.SummeryTables != null) { nLSolver.SummeryTables.WriteAllToFileAndClearBuffer(); } } //输出 if (this.IsOutputInt && wLSolver.IntValueTables != null) { wLSolver.IntValueTables.WriteAllToFileAndClearBuffer(); } if (this.IsOutputFraction && wLSolver.FractionValueTables != null) { wLSolver.FractionValueTables.WriteAllToFileAndClearBuffer(); } if (this.IsOutputSummary && wLSolver.SummeryTables != null) { wLSolver.SummeryTables.WriteAllToFileAndClearBuffer(); } TotalObsCountOfWL += wLSolver.TotalObsCount; } }