Example #1
0
        /// <summary>
        /// 设置常见的变量。
        /// </summary>
        /// <param name="Adjustment"></param>
        protected override void TrySetCommonParamValues(AdjustResultMatrix Adjustment)
        {
            base.TrySetCommonParamValues(Adjustment);

            Vector estmated = Adjustment.Estimated;

            if (estmated != null)
            {
                //对流层设置
                //if (Adjustment.ParamNames.Contains(Gnsser.ParamNames.Trop))
                //{
                //    epochInfo.NumeralCorrections[Gnsser.ParamNames.Trop] = estmated[Adjustment.GetIndexOf(Gnsser.ParamNames.Trop)];
                //}
                //需要计算的属性
                //接收机钟差
                if (Adjustment.ParamNames.Contains(Gnsser.ParamNames.RcvClkErrDistance))
                {
                    this.RcvClkErrDistance = estmated[Adjustment.GetIndexOf(Gnsser.ParamNames.RcvClkErrDistance)];
                    //log.Debug("取消了接收机钟差改正!");
                    //钟差到改正数,需要转换为相反数 // 2018.06.08, czs, HMX
                    double clkError = this.RcvClkErrDistance / GnssConst.LIGHT_SPEED;
                    if (Math.Abs(clkError) > GnssConst.LIGHT_SPEED)
                    {
                        log.Warn("钟差太大了吧! " + clkError);
                    }
                    this.MaterialObj.Time.Correction = -clkError; //钟差变成改正数
                }
            }
        }
        /// <summary>
        /// 精密单点定位结果构造函数。
        /// </summary>
        /// <param name="receiverInfo">接收信息</param>
        /// <param name="Adjustment">平差</param>
        /// <param name="nameBuilder">参数名称生成器</param>
        public IonoModeledSingleFreqPppResult(
            EpochInformation receiverInfo,
            AdjustResultMatrix Adjustment, GnssParamNameBuilder nameBuilder
            )
            : base(receiverInfo, Adjustment, nameBuilder)
        {
            this.WetTropoFactor = this.ResultMatrix.Corrected.CorrectedValue[Adjustment.GetIndexOf(Gnsser.ParamNames.WetTropZpd)];
            //处理模糊度
            this.AmbiguityDic = new Dictionary <SatelliteNumber, double>();

            int length = receiverInfo.EnabledSatCount * 2 + 5;

            Vector vector = Adjustment.Corrected.CorrectedValue;

            for (int i = 5 + receiverInfo.EnabledSatCount; i < 5 + receiverInfo.EnabledSatCount; i++)
            {
                SatelliteNumber prn = receiverInfo[i - 5 - receiverInfo.EnabledSatCount].Prn;
                //double val = vector[i];
                //double[] AmbiguityItem = new double[1];

                //AmbiguityItem[0] = val;
                ////AmbiguityItem[1] = vector[i + receiverInfo.EnabledSatCount];

                //AmbiguityDic.Add(prn, val);
            }
        }
Example #3
0
 /// <summary>
 /// 精密单点定位结果构造函数。
 /// </summary>
 /// <param name="receiverInfo">接收信息</param>
 /// <param name="Adjustment">平差</param>
 /// <param name="paramNames">参数名称</param>
 public UncombinedPppResult(
     EpochInformation receiverInfo,
     AdjustResultMatrix Adjustment, GnssParamNameBuilder positioner
     )
     : base(receiverInfo, Adjustment, positioner)
 {
     this.WetTropoFactor = this.ResultMatrix.Corrected.CorrectedValue[Adjustment.GetIndexOf(Gnsser.ParamNames.WetTropZpd)];
     //处理模糊度
 }
        /// <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++;
                }
            }
        }
Example #5
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++;
                }
            }
        }
Example #6
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++;
                }
            }
        }
        /// <summary>
        /// 双差网解定位构造函数
        /// </summary>
        /// <param name="epochInfo">历元信息</param>
        /// <param name="Adjustment">平差信息</param>
        /// <param name="ClockEstimationer">钟差估计器</param>
        /// <param name="previousResult">上一历元结果</param>
        public MultiSiteGnssExtentResult(
            MultiSiteEpochInfo epochInfo,
            AdjustResultMatrix Adjustment,
            GnssParamNameBuilder ClockEstimationer,
            MultiSiteGnssExtentResult 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)];
            }
        }
Example #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="epochInfos"></param>
        /// <param name="Adjustment"></param>
        /// <param name="nameBuilder"></param>
        public AbstractClockEstimationResult(
            MultiSiteEpochInfo epochInfos,
            AdjustResultMatrix Adjustment,
            GnssParamNameBuilder nameBuilder) : base(epochInfos, Adjustment, nameBuilder)
        {
            Vector corrected = Adjustment.Corrected.CorrectedValue;


            //update

            this.DeltaTimeDistances = new Dictionary <string, double>();
            foreach (var epoch in epochInfos)
            {
                var key = NameBuilder.GetReceiverClockParamName(epoch);
                var val = corrected[Adjustment.GetIndexOf(key)];
                epoch.NumeralCorrections[Gnsser.ParamNames.cDt] = val;
                this.DeltaTimeDistances.Add(epoch.Name, val);
                epoch.Time.Correction = val / GnssConst.LIGHT_SPEED;
            }
        }
Example #9
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);
                    }
                }
            }
        }