/// <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++;
                }
            }
        }
Esempio n. 2
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);
                }
            }
        }
Esempio n. 3
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);
                    }
                }
            }
        }
Esempio n. 4
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++;
                }
            }
        }
Esempio n. 5
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++;
                }
            }
        }