Ejemplo n.º 1
0
        /// <summary>
        /// 所有测站与指定参考星的差分值(浮点数)。
        /// 必须与测站共视才可以差分。结果中包括了共视时段。
        /// </summary>
        /// <param name="basePrn"></param>
        /// <returns></returns>
        public MultiSitePeriodValueStorage GetRawDiffer(SatelliteNumber basePrn)
        {
            if (CasheOfRawDiffers.Contains(basePrn))
            {
                return(CasheOfRawDiffers[basePrn]);
            }
            lock (rawDifferLocker)
            {
                if (CasheOfRawDiffers.Contains(basePrn))
                {
                    return(CasheOfRawDiffers[basePrn]);
                }

                log.Info("开始生成 星间单差浮点数,基准星:" + basePrn);
                MultiSitePeriodValueStorage sitePeriodDifferFloat = new MultiSitePeriodValueStorage("所有站星间单差宽巷浮点数模糊度(MW)");
                foreach (var siteKv in this.Data)
                {
                    if (!siteKv.Value.Contains(basePrn))
                    {
                        continue;
                    }
                    string siteName   = siteKv.Key;
                    var    periodVals = siteKv.Value;
                    MultiSatPeriodRmsNumeralStorage newSite = periodVals.GetRawDiffer(basePrn);
                    sitePeriodDifferFloat.Add(siteName, newSite);
                }
                log.Info("星间单差浮点数生成完毕,基准星:" + basePrn);

                CasheOfRawDiffers[basePrn] = sitePeriodDifferFloat;

                return(sitePeriodDifferFloat);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 四舍五入法固定模糊度
        /// </summary>
        /// <param name="maxDifferForAmbi">允许的最大偏差</param>
        /// <param name="maxRms">允许的最大的RMS</param>
        /// <param name="fractions">小数部分产品</param>
        /// <returns></returns>
        public MultiSitePeriodValueStorage GetRoundInt(Dictionary <SatelliteNumber, RmsedNumeral> fractions, double maxDifferForAmbi, double maxRms)
        {
            MultiSitePeriodValueStorage result = new MultiSitePeriodValueStorage("所有站宽巷星间单差整数模糊度");

            foreach (var siteKv in this.Data) //遍历计算所有测站
            {
                string siteName   = siteKv.Key;
                var    periodVals = siteKv.Value;
                MultiSatPeriodRmsNumeralStorage newSite = periodVals.GetRoundInt(siteName, fractions, maxDifferForAmbi, maxRms);
                if (newSite.Count > 0)
                {
                    result.Add(newSite.Name, newSite);
                }
            }
            return(result);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 解析表格获取对象
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public static MultiSitePeriodValueStorage ParseDetailTable(ObjectTableStorage table)
        {
            MultiSitePeriodValueStorage store = new MultiSitePeriodValueStorage(table.Name);

            store.DetailTable = table;
            foreach (var row in table.BufferedValues)
            {
                var site   = row["Site"].ToString();
                var prn    = SatelliteNumber.Parse(row["Name"].ToString());
                var period = TimePeriod.Parse(row["Group"].ToString());
                var val    = (double)row["Value"];
                var rms    = (double)row["RMS"];

                store.GetOrCreate(site).GetOrCreate(prn)[period] = new RmsedNumeral(val, rms);
            }
            return(store);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 返回宽巷差分后的整数部分,用于固定模糊度,注意区分时段。
        /// 如果不含基准卫星,返回null
        /// </summary>
        /// <param name="basePrn">基准卫星</param>
        /// <param name="maxDifferForAmbi">允许的最大偏差</param>
        /// <param name="maxRms">允许的最大的RMS</param>
        /// <returns></returns>
        public MultiSitePeriodValueStorage GetDifferInt(SatelliteNumber basePrn, double maxDifferForAmbi = 0.35, double maxRms = 0.8)
        {
            log.Info("开始生成星间单差模糊度,基准星:" + basePrn);
            //宽巷小数产品
            var fracProducts = GetDifferFractionProduct();    //包括所有基准星的差分产品

            if (!fracProducts.ContainsKey(basePrn))
            {
                log.Debug("产品不包含基准卫星!" + basePrn); return(null);
            }
            var fractions = fracProducts[basePrn];                                                                        //当前基准星,星间单差的小数部分,

            MultiSitePeriodValueStorage floatRawDiffer = GetRawDiffer(basePrn);                                           //星间差分宽巷浮点数
            MultiSitePeriodValueStorage result         = floatRawDiffer.GetRoundInt(fractions, maxDifferForAmbi, maxRms); //星间差分宽巷整数

            log.Info("星间单差模糊度生成完毕,基准星:" + basePrn);
            return(result);
        }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 解析为对象
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static MultiSitePeriodValueStorage ParseDetailTable(string path)
        {
            var data = new ObjectTableReader(path).Read();

            return(MultiSitePeriodValueStorage.ParseDetailTable(data));
        }