Ejemplo n.º 1
0
        /// <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));
        }