/// <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);
        }
        /// <summary>
        /// 原始数据差分当前星,如获取PPP浮点数星间单差。
        /// </summary>
        /// <param name="basePrn"></param>
        /// <returns></returns>
        public MultiSiteEpochValueStorage GetRawDiffer(SatelliteNumber basePrn)
        {
            log.Info("开始生成 星间单差浮点数,基准星:" + basePrn);
            MultiSiteEpochValueStorage sitePeriodDifferFloat = new MultiSiteEpochValueStorage("所有站星间单差浮点数模糊度");

            foreach (var siteKv in this.Data)
            {
                string siteName   = siteKv.Key;
                var    periodVals = siteKv.Value;
                var    newSite    = periodVals.GetRawDiffer(basePrn);
                sitePeriodDifferFloat.Add(siteName, newSite);
            }
            log.Info("星间单差浮点数生成完毕,基准星:" + basePrn);
            return(sitePeriodDifferFloat);
        }
        /// <summary>
        /// 获取四舍五入小数部分。
        /// </summary>
        /// <returns></returns>
        public MultiSiteEpochValueStorage GetRoundFraction()
        {
            MultiSiteEpochValueStorage result = new MultiSiteEpochValueStorage("返回正小数部分");

            foreach (var siteKv in this.Data)
            {
                string siteName   = siteKv.Key;
                var    periodVals = siteKv.Value;
                if (periodVals == null || periodVals.Count == 0)
                {
                    continue;
                }

                var newSite = periodVals.GetRoundFraction();
                result.Add(siteName, newSite);
            }
            log.Info("小数部分提取完成");//,基准星:" + basePrn);
            return(result);
        }
        /// <summary>
        /// 所有站星间单差窄巷浮点数模糊度
        /// </summary>
        /// <param name="intValueOfDifferWL"></param>
        /// <param name="funcToSolvNlAmbi"></param>
        /// <returns></returns>
        public MultiSiteEpochValueStorage GetNarrowLaneFcbs(MultiSitePeriodValueStorage intValueOfDifferWL, Func <RmsedNumeral, RmsedNumeral, RmsedNumeral> funcToSolvNlAmbi)
        {
            log.Info("开始生成 所有站星间单差窄巷浮点数模糊度");//,基准星:" + basePrn);
            MultiSiteEpochValueStorage narrrowFcbs = new MultiSiteEpochValueStorage("所有站星间单差窄巷浮点数模糊度");

            foreach (var siteKv in this.Data)
            {
                string siteName    = siteKv.Key;
                var    periodVals  = siteKv.Value;
                var    wideIntVals = intValueOfDifferWL.Get(siteKv.Key);
                if (wideIntVals == null || wideIntVals.Count == 0)
                {
                    continue;
                }

                var newSite = periodVals.GetNarrowLaneFcbs(wideIntVals, funcToSolvNlAmbi);
                narrrowFcbs.Add(siteName, newSite);
            }
            log.Info("所有站星间单差窄巷浮点数模糊度生成完毕");//,基准星:" + basePrn);
            return(narrrowFcbs);
        }