/// <summary>
 /// 计算的等效模糊度距离。
 /// 如果有则返回,若无返回0。
 /// </summary>
 /// <param name="satelliteType"></param>
 /// <returns></returns>
 public double GetAmbiguityDistace(SatelliteNumber prn)
 {
     if (AmbiguityDic.ContainsKey(prn))
     {
         return(AmbiguityDic[prn]);
     }
     else
     {
         return(0);
     }
 }
Ejemplo n.º 2
0
        //public ClockEstimationResult(
        //    MultiSitePeriodInfo epochInfo,
        //    Adjustment Adjustment,
        //    GnssParamNameBuilder ClockEstimationer,
        //    ClockEstimationResult previousResult = null)
        //    : base(epochInfo, Adjustment, ClockEstimationer)
        //{
        //    Vector vector = Adjustment.Corrected;


        //    //update
        //    foreach (var epoch in epochInfo)
        //    {
        //        var keyPrev = NameBuilder.GetReceiverWetTropParamName(epoch);
        //        epoch.NumeralCorrections[Gnsser.ParamNames.Trop] = vector[Adjustment.GetIndexOf(keyPrev)];
        //    }

        //    this.AmbiguityDic = new Dictionary<string, double>();
        //    int length = ParamCount;
        //    for (int i = 2 * MaterialObj.Count + EnabledPrns.Count; i < length; i++)
        //    {
        //        double val = vector[i];
        //        AmbiguityDic.Add(ParamNames[i], val);
        //    }
        //    //this.PrnWithSlips = new List<SatelliteNumber>();
        //    this.PrnWithSlipss = new List<string>();
        //    foreach (var key in epochInfo)
        //    {
        //        foreach (var item1 in key)
        //            if (item1.IsUnstable)
        //            {
        //                //PrnWithSlips.Add(item1.Prn);
        //                PrnWithSlipss.Add(key.SiteName + "-" + item1.Prn);
        //            }
        //    }
        //}
        /// <summary>
        ///
        /// </summary>
        /// <param name="SiteName"></param>
        /// <param name="prn"></param>
        /// <returns></returns>
        public double GetAmbiguityDistace(string SiteName, SatelliteNumber prn)
        {
            if (AmbiguityDic.ContainsKey(SiteName + "-" + prn))
            {
                return(AmbiguityDic[SiteName + "-" + prn]);
            }
            else
            {
                return(0);
            }
        }
 /// <summary>
 /// 计算的等效模糊度距离。
 /// 如果有则返回,若无返回0。
 /// </summary>
 /// <param name="prn"></param>
 /// <returns></returns>
 public double GetAmbiguityDistace(SatNumberAndFrequence PrnFre)
 {
     if (AmbiguityDic.ContainsKey(PrnFre))
     {
         return(AmbiguityDic[PrnFre]);
     }
     else
     {
         return(0);
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// 获取指定测站和卫星的模糊度距离。
        /// </summary>
        /// <param name="siteName"></param>
        /// <param name="prn"></param>
        /// <returns></returns>
        public double GetAmbiguityDistance(string siteName, SatelliteNumber prn)
        {
            var key = GetSiteSatMaker(siteName, prn);

            if (AmbiguityDic.ContainsKey(key))
            {
                return(AmbiguityDic[key]);
            }
            else
            {
                return(0);
            }
        }
        /// <summary>
        /// 双差差分定位结果。具有模糊度。
        /// </summary>
        /// <param name="epochInfo">历元观测信息</param>
        /// <param name="PointPositionType">单点定位类型</param>
        public EpochDouFreDoubleDifferPositionResult(
            MultiSiteEpochInfo receiverInfo,
            AdjustResultMatrix Adjustment,
            GnssParamNameBuilder positioner,
            SatelliteNumber baseSatPrn,
            int baseParamCount = 5
            )
            : base(receiverInfo, Adjustment, positioner)
        {
            this.BasePrn = baseSatPrn;
            int index = Adjustment.GetIndexOf(Gnsser.ParamNames.WetTropZpd);

            if (index != -1)
            {
                this.WetTropoFactor = this.ResultMatrix.Corrected.CorrectedValue[Adjustment.GetIndexOf(Gnsser.ParamNames.WetTropZpd)];
            }
            else
            {
                this.WetTropoFactor = 0.0;
            }
            //处理模糊度
            this.AmbiguityDic = new Dictionary <SatNumberAndFrequence, double>();

            Vector vector = Adjustment.Corrected.CorrectedValue;

            int satIndex = 0;

            foreach (var item in receiverInfo.EnabledPrns)
            {
                if (item != BasePrn)
                {
                    Frequence             FrequenceA = Frequence.GetFrequence(this.BasePrn, SatObsDataType.PhaseRangeA, receiverInfo.ReceiverTime);
                    Frequence             FrequenceB = Frequence.GetFrequence(this.BasePrn, SatObsDataType.PhaseRangeB, receiverInfo.ReceiverTime);
                    SatNumberAndFrequence satA       = new SatNumberAndFrequence();
                    satA.SatNumber = item; satA.Frequence = FrequenceA;
                    SatNumberAndFrequence satB = new SatNumberAndFrequence();
                    satB.SatNumber = item; satB.Frequence = FrequenceB;
                    double val = vector[satIndex];
                    AmbiguityDic.Add(satA, val);
                    AmbiguityDic.Add(satB, val);
                    satIndex++;
                }
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 计算的等效模糊度距离。
        /// 如果有则返回,若无返回0。
        /// </summary>
        /// <param name="prn"></param>
        /// <returns></returns>
        public double GetFloatAmbiguityCycle(SatelliteNumber prn)
        {
            var key = GetSiteSatMaker(SiteInfo.SiteName, prn);
            var val = 0.0;

            if (AmbiguityDic.ContainsKey(key))
            {
                val = AmbiguityDic[key];
            }
            var len = 1.0;

            if (this.Material.EnabledPrns.Contains(prn))
            {
                var waveLength = Frequence.GpsL1.WaveLength; //???
                                                             //    len = Frequence.GetIonoFreeFrequence(prn.SatelliteType).WaveLength;// this.MaterialObj[prn].Combinations.IonoFreePhaseRange.Frequence.WaveLength;
                int i = 0;
            }

            return(val / len);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 精密单点定位结果构造函数。
        /// </summary>
        /// <param name="receiverInfo">接收信息</param>
        /// <param name="Adjustment">平差</param>
        /// <param name="paramNameBuilder">参数名称</param>
        public SingleFreqPppResult(
            EpochInformation receiverInfo,
            AdjustResultMatrix Adjustment, GnssParamNameBuilder paramNameBuilder
            )
            : base(receiverInfo, Adjustment, paramNameBuilder)
        {
            //处理模糊度
            this.AmbiguityDic = new Dictionary <SatelliteNumber, double>();

            Vector vector = Adjustment.Corrected.CorrectedValue;

            foreach (var name in this.ParamNames)
            {
                if (name.Contains(Gnsser.ParamNames.AmbiguityLen))
                {
                    var prn = SatelliteNumber.Parse(name);
                    var val = vector[name];
                    AmbiguityDic.Add(prn, val);
                }
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 钟差估计构造函数
        /// </summary>
        /// <param name="epochInfo">历元信息</param>
        /// <param name="Adjustment">平差信息</param>
        /// <param name="ClockEstimationer">钟差估计器</param>
        /// <param name="previousResult">上一历元结果</param>
        public ClockEstimationResult(
            MultiSiteEpochInfo epochInfo,
            AdjustResultMatrix Adjustment,
            GnssParamNameBuilder ClockEstimationer,
            ClockEstimationResult previousResult = null)
            : base(epochInfo, Adjustment, ClockEstimationer)
        {
            Vector vector = Adjustment.Corrected.CorrectedValue;


            //update
            foreach (var epoch in epochInfo)
            {
                var key = NameBuilder.GetSiteWetTropZpdName(epoch);
                epoch.NumeralCorrections[Gnsser.ParamNames.WetTropZpd] = vector[Adjustment.GetIndexOf(key)];
            }

            this.AmbiguityDic = new Dictionary <string, double>();
            int length = ParamCount;

            for (int i = 2 * MaterialObj.Count + EnabledPrns.Count; i < length; i++)
            {
                double val = vector[i];
                AmbiguityDic.Add(ParamNames[i], val);
            }
            //this.PrnWithSlips = new List<SatelliteNumber>();
            this.PrnWithSlipss = new List <string>();
            foreach (var item in epochInfo)
            {
                foreach (var item1 in item)
                {
                    if (item1.IsUnstable)
                    {
                        //PrnWithSlips.Add(item1.Prn);
                        PrnWithSlipss.Add(item.SiteName + "-" + item1.Prn);
                    }
                }
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 精密单点定位结果构造函数。
        /// </summary>
        /// <param name="receiverInfo">接收信息</param>
        /// <param name="Adjustment">平差</param>
        /// <param name="positioner">定位器</param>
        /// <param name="baseParamCount">基础参数数量</param>
        public PppResult(
            EpochInformation receiverInfo,
            AdjustResultMatrix Adjustment,
            GnssParamNameBuilder positioner,
            int baseParamCount = 5, bool isTopSpeed = false
            )
            : base(receiverInfo, Adjustment, positioner, isTopSpeed)
        {
            if (!isTopSpeed)
            {
                if (this.ResultMatrix.ParamNames.Contains(Gnsser.ParamNames.WetTropZpd) || this.ResultMatrix.ParamNames.Contains(Gnsser.ParamNames.Trop))
                {
                    this.WetTropoFactor = this.ResultMatrix.Corrected.CorrectedValue[Adjustment.GetIndexOf(Gnsser.ParamNames.WetTropZpd)];
                }

                //处理模糊度
                this.AmbiguityDic = new Dictionary <string, double>();
                int length = receiverInfo.EnabledSatCount + baseParamCount;
                //this.BasePrn = positioner.CurrentBasePrn;

                Vector vector      = Adjustment.Corrected.CorrectedValue;
                var    enabledPrns = receiverInfo.EnabledPrns;
                int    i           = baseParamCount;
                foreach (var prn in enabledPrns)
                {
                    var name  = NameBuilder.GetParamName(prn);
                    var index = Adjustment.GetIndexOf(name);
                    if (index == -1)
                    {
                        continue;
                    }

                    double val = vector[index];
                    var    key = GetSiteSatMaker(SiteInfo.SiteName, prn);
                    AmbiguityDic.Add(key, val);
                    i++;
                }
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 双差差分定位结果。具有模糊度。
        /// </summary>
        /// <param name="mInfo">历元观测信息</param>
        /// <param name="Adjustment"></param>
        /// <param name="positioner"></param>
        /// <param name="baseSatPrn"></param>
        /// <param name="baseParamCount"></param>
        public IonFreeDoubleDifferPositionResult(
            MultiSiteEpochInfo mInfo,
            AdjustResultMatrix Adjustment,
            GnssParamNameBuilder positioner,
            SatelliteNumber baseSatPrn,
            int baseParamCount = 5
            )
            : base(mInfo, Adjustment, positioner)
        {
            this.Name    = mInfo.BaseEpochInfo.Name + Gnsser.ParamNames.BaseLinePointer + mInfo.OtherEpochInfo.Name;
            this.BasePrn = baseSatPrn;

            int index = Adjustment.GetIndexOf(Gnsser.ParamNames.WetTropZpd);

            if (index != -1)
            {
                this.WetTropoFactor = this.ResultMatrix.Corrected.CorrectedValue[Adjustment.GetIndexOf(Gnsser.ParamNames.WetTropZpd)];
            }
            else
            {
                this.WetTropoFactor = 0.0;
            }
            //处理模糊度
            this.AmbiguityDic = new Dictionary <SatelliteNumber, double>();
            Vector vector = Adjustment.Corrected.CorrectedValue;

            int satIndex = 0;

            foreach (var item in mInfo.EnabledPrns)
            {
                if (item != BasePrn)
                {
                    double val = vector[satIndex];
                    AmbiguityDic.Add(item, val);
                    satIndex++;
                }
            }
        }