/// <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_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)); }