/// <summary> /// 运行 /// </summary> /// <returns></returns> public override void Run() { //各个测站做星间单差 //获取星间单差值 MultiSiteEpochValueStorage rawDiffer = FloatAmbiSolution.GetRawDiffer(BasePrn); //与宽巷模糊度整数产品一起,计算窄巷模糊度的浮点解 MultiSiteEpochValueStorage floatNlVals = rawDiffer.GetNarrowLaneFcbs(IntValueOfDifferWL, GetNarrowLaneValue); //浮点数小数部分 MultiSiteEpochValueStorage fractionOfNL = floatNlVals.GetRoundFraction(); //合并相同卫星的浮点数小数部分 EpochSatSiteValueList epochSatValues = fractionOfNL.GetSameSatValues(); //求加权平均,每一个历元,每颗卫星只有一个产品,忽略数量太少的历元 this.FcbProducts = epochSatValues.GetAverage(this.MinSiteCount, MaxRmsTimes); //生成窄巷FCB 产品,并写入文件 this.FcbOfUpds = FcbProducts.GetFcbProduct(BasePrn); //写入文件 FcbOfUpdWriter.WriteEpochProducts(FcbOfUpds, BasePrn + "_EpochNLFcbOfDcb"); //显示逐历元结果,表名为卫星,各表列为测站名称 this.FloatValueTables = epochSatValues.GetTable(this.OutputDirectory, BasePrn); //生成逐历元表格文件 base.BuildProducts(); }
private void button_saveWLToGNSSer_Click(object sender, EventArgs e) { var service = GetFcbDataService(); var timeperiod = this.timePeriodControl1.TimePeriod; SatelliteNumber basePrn = (SatelliteNumber)this.bindingSource_basePrn.Current; var toPath = Path.Combine(Setting.TempDirectory, "WhuWLFcbToGNSSer" + Gnsser.Setting.FcbExtension); using (FcbOfUpdWriter writer = new FcbOfUpdWriter(toPath)) { var Interval = TimeSpan.FromDays(1); for (var time = timeperiod.Start.Date; time <= timeperiod.End; time += Interval) { var bsdFrac = service.GetWLFcbOfBsd(time, basePrn); if (bsdFrac != null && bsdFrac.Count > 0) { FcbOfUpd fcbOfUpd = new FcbOfUpd(basePrn, time, true); foreach (var kv in bsdFrac.KeyValues) { fcbOfUpd.Add(kv.Key, kv.Value); } if (fcbOfUpd.DataCount > 0) { writer.Write(fcbOfUpd); } } } } Geo.Utils.FormUtil.ShowOkAndOpenDirectory(Setting.TempDirectory); }
private void button_saveToGnsserFcb_Click(object sender, EventArgs e) { var service = GetFcbDataService(); var timeperiod = this.timePeriodControl1.TimePeriod; SatelliteNumber basePrn = (SatelliteNumber)this.bindingSource_basePrn.Current; var Interval = TimeSpan.FromMinutes(15); var toPath = Path.Combine(Setting.TempDirectory, "WhuNLFcbToGNSSer" + Gnsser.Setting.FcbExtension); using (FcbOfUpdWriter writer = new FcbOfUpdWriter(toPath)) { for (var time = timeperiod.Start; time <= timeperiod.End; time += Interval) { FcbOfUpd fcbOfUpd = new FcbOfUpd(basePrn, time, false); foreach (var prn in SatelliteNumber.DefaultGpsPrns) { var bsdFrac = service.GetNLFcbOfBsdValue(time, prn, basePrn); if (bsdFrac != null) { fcbOfUpd.Add(prn, bsdFrac); } } if (fcbOfUpd.DataCount > 0) { writer.Write(fcbOfUpd); } } } Geo.Utils.FormUtil.ShowOkAndOpenDirectory(Setting.TempDirectory); }
private void button_convertToGnsserFcb_Click(object sender, EventArgs e) { var basePrn = baseSatSelectingControl1.SelectedPrn; if (basePrn.SatelliteType != SatelliteType.G) { MessageBox.Show("请选择GPS系统!目前似乎还不支持其它系统,如果支持了请尝试高版本先,若还没有请 Email To: [email protected]"); return; } var toPath = Path.Combine(Setting.TempDirectory, "FcbOfDcb" + Gnsser.Setting.FcbExtension); FcbOfUpdWriter writer = new FcbOfUpdWriter(toPath); var period = this.timePeriodControl1.TimePeriod; var path = this.fileOpenControlOpath.FilePath; WideLaneBiasService = new WideLaneBiasService(path); for (var time = period.Start.Date; time <= period.End; time += TimeSpan.FromDays(1)) { var data = WideLaneBiasService.Get(time); if (data == null) { continue; } FcbOfUpd fcb = new FcbOfUpd(basePrn, data); writer.Write(fcb); } writer.Dispose(); Geo.Utils.FormUtil.ShowOkAndOpenDirectory(Setting.TempDirectory); }
private FcbOfUpdWriter WriteFinal(FcbOfUpd bsdProduct) { //写最终FCB 产品 var fcbPath = Path.Combine(this.OutputDirectory, "FcbProduct" + Setting.FcbExtension); FcbOfUpdWriter writer = new FcbOfUpdWriter(fcbPath); writer.Write(bsdProduct); writer.Dispose(); return(writer); }
private static void WriteEpochProducts(List <FcbOfUpd> list, string name = "EpochFcbOfDcb") { var toPath = Path.Combine(Setting.TempDirectory, name + Gnsser.Setting.FcbExtension); FcbOfUpdWriter writer = new FcbOfUpdWriter(toPath); foreach (var fcb in list) { if (fcb == null) { continue; } writer.Write(fcb); } writer.Dispose(); }
/// <summary> /// 运行。 /// </summary> public void Run() { var TotalObsCount = 0; if (BsdWidelaneInts != null)//对象差分整数 { log.Info("采用新方法"); if (MultiSitePppEpochValue != null) { Dictionary <SatelliteNumber, MultiSatEpochRmsNumeralStorage> products = new Dictionary <SatelliteNumber, MultiSatEpochRmsNumeralStorage>(); foreach (var basePrn in BsdWidelaneInts.Keys) { log.Info("正在计算基准星为 " + basePrn + " 的窄巷模糊度"); var intWideLaneObj = BsdWidelaneInts[basePrn]; var solver = new EpochBsdOfNarrowLaneSolver(basePrn, MultiSitePppEpochValue, intWideLaneObj, this.OutputDirectory); solver.MaxAllowedDiffer = MaxAllowedDiffer; solver.MinSiteCount = MinSiteCount; solver.MaxRmsTimes = MaxRmsTimes; solver.Run(); if (IsOutputFraction && solver.FractionValueTables != null) { solver.FractionValueTables.WriteAllToFileAndClearBuffer(); } if (IsOutputSummary && solver.SummeryTables != null) { solver.SummeryTables.WriteAllToFileAndClearBuffer(); } //if (IsOutputInt && solver.IntValueTables != null) { solver.IntValueTables.WriteAllToFileAndClearBuffer(); } //需要计算所有历元的数值!!!!宽巷也可以,用于查看结果。 if (!IsLoopAllSats) { break; } products[basePrn] = solver.FcbProducts; } if (IsLoopAllSats)//汇集产品到一起 { //归算到基准星 var samePrnProducts = new MultiSiteEpochValueStorage("归算到同一颗卫星"); var basePrn = BsdWidelaneInts.Keys.First(); foreach (var kv in products) { var name = kv.Key.ToString(); if (kv.Key == basePrn) { samePrnProducts[kv.Key.ToString()] = kv.Value; } else { samePrnProducts[name] = kv.Value.GetRawDiffer(basePrn); } } //汇集各卫星产品到一起 var together = samePrnProducts.GetSameSatValues(); //计算不准确,算法有待改进!! //求加权平均,每一个历元,每颗卫星只有一个产品,忽略数量太少的历元 var FcbProducts = together.GetAverage(1, 3); //生成窄巷FCB 产品,并写入文件 var FcbOfUpds = FcbProducts.GetFcbProduct(basePrn); //写入文件 //写入文件 FcbOfUpdWriter.WriteEpochProducts(FcbOfUpds, basePrn + "_FinalEpochNLFcbOfDcb"); } } else // 次新方法 { foreach (var basePrn in BsdWidelaneInts.Keys) { var intWideLaneObj = BsdWidelaneInts[basePrn]; var solver = new BsdOfNarrowLaneSolver(basePrn, FloatAmbiguitiesOfPpp, intWideLaneObj, this.OutputDirectory); solver.MaxAllowedDiffer = MaxAllowedDiffer; solver.Run(); if (IsOutputFraction) { solver.FractionValueTables.WriteAllToFileAndClearBuffer(); } if (IsOutputSummary) { solver.SummeryTables.WriteAllToFileAndClearBuffer(); } if (IsOutputInt) { solver.IntValueTables.WriteAllToFileAndClearBuffer(); } //需要计算所有历元的数值!!!!宽巷也可以,用于查看结果。 } } } else { log.Info("采用老表格方法"); foreach (var kv in IntOfWLPathes) { ObjectTableManager intWideLane = ObjectTableManager.Read(kv.Value.ToArray());// ReadWideLaneTable(PppResultTableManager); var basePrn = kv.Key; string outputDirectory = this.OutputDirectory; if (IsOutputInEachDirectory) { var start = intWideLane.GetFirstIndexValue <Time>(); var end = intWideLane.GetLastIndexValue <Time>(); var span = new TimePeriod(start, end); outputDirectory = System.IO.Path.Combine(this.OutputDirectory, span.ToPathString(false, true, false) + "_" + basePrn); intWideLane.OutputDirectory = outputDirectory; FloatAmbiguitiesOfPpp.OutputDirectory = outputDirectory; } BsdProductSolver solver; //PPP模糊度浮点解 solver = new NarrowLaneOfBsdSolver(basePrn, FloatAmbiguitiesOfPpp, intWideLane, outputDirectory); solver.MaxAllowedDiffer = MaxAllowedDiffer; solver.Run(); if (IsOutputFraction) { solver.FractionValueTables.WriteAllToFileAndClearBuffer(); } if (IsOutputSummary) { solver.SummeryTables.WriteAllToFileAndClearBuffer(); } if (IsOutputInt) { solver.IntValueTables.WriteAllToFileAndClearBuffer(); } TotalObsCount += solver.TotalObsCount; } log.Info(" 总共处理的观测数值数 " + TotalObsCount); } }
private void button_combine_Click(object sender, EventArgs e) { var fcbPathes = fileOpenControl_fcbPathes.FilePathes; var basePrn = this.baseSatSelectingControl1.SelectedPrn; log.Info("即将转换FCB文件基准到 " + basePrn); //文件读取 Dictionary <string, FcbOfUpdFile> data = new Dictionary <string, FcbOfUpdFile>(); FcbOfUpdFile baseFile = null; foreach (var path in fcbPathes) { var file = new FcbOfUpdReader(path).ReadToFile(); if (file.Count == 0) { continue; } var target = file.ToFile(basePrn);//基准转换到统一的卫星 if (target == null || target.Count == 0) { continue; } var fileName = Path.GetFileName(path); data[fileName] = target; if (baseFile == null) { baseFile = target; } } log.Info("文件读取完毕,数量: " + fcbPathes.Length); //汇集 log.Info("即将汇集各文件到一个对象,然后方便进行平均,这个过程比较耗时。。。 "); EpochSatSiteValueList valList = new EpochSatSiteValueList("多基准FCB合成"); foreach (var epochProduct in baseFile) { var epoch = epochProduct.Epoch; valList.GetOrCreate(epoch).GetOrCreate(basePrn).Add("BasePrn", RmsedNumeral.Zero); //基准卫星和数据不用计算。 foreach (var kv in data) { var epochVal = kv.Value.Get(epoch); if (epochVal == null) { continue; } foreach (var item in epochVal.Data.KeyValues) { if (item.Key == basePrn) { continue; } if (RmsedNumeral.IsValid(item.Value)) { valList.GetOrCreate(epoch).GetOrCreate(item.Key).Add(kv.Key, item.Value); } } } } log.Info("各文件汇集转换完成,即将求平均 "); //求平均 var ave = valList.GetAverage(0, 3); //生成窄巷FCB 产品,并写入文件 var FcbOfUpds = ave.GetFcbProduct(basePrn); //写入文件 //写入文件 var outpath = FcbOfUpdWriter.WriteEpochProducts(FcbOfUpds, basePrn + "_CombiedEpochNLFcbOfDcb"); log.Info("执行完毕! "); Geo.Utils.FormUtil.ShowOkAndOpenDirectory(Path.GetDirectoryName(outpath)); }