/// <summary>
        /// 双差网解定位。具有模糊度。
        /// </summary>
        /// <param name="mInfo">历元观测信息</param>
        /// <param name="Adjustment"></param>
        /// <param name="positioner"></param>
        /// <param name="baseSatPrn"></param>
        /// <param name="baseParamCount"></param>
        public NetDoubleDifferPositionResult(
            MultiSiteEpochInfo mInfo,
            AdjustResultMatrix Adjustment,
            GnssParamNameBuilder positioner,
            SatelliteNumber baseSatPrn,
            int baseParamCount = 5
            )
            : base(mInfo, Adjustment, positioner)
        {
            //设置第一个流动站坐标改正数
            int i        = 0;
            var estmated = this.ResultMatrix.Estimated;

            foreach (var paramName in estmated.ParamNames)
            {
                if (paramName.Contains(Gnsser.ParamNames.Dx))
                {
                    double x = estmated[i];
                    double y = estmated[i + 1];
                    double z = estmated[i + 2];
                    this.XyzCorrection = new XYZ(x, y, z);
                    break;
                }
            }
        }
Пример #2
0
 /// <summary>
 /// 精 通用单站单频计算,高度可配置构造函数。
 /// </summary>
 /// <param name="receiverInfo">接收信息</param>
 /// <param name="Adjustment">平差</param>
 /// <param name="positioner">定位器</param>
 public DoubleFreqIonoSingleFreqPppGnssResult(
     EpochInformation receiverInfo,
     AdjustResultMatrix Adjustment, GnssParamNameBuilder positioner
     )
     : base(receiverInfo, Adjustment, positioner)
 {
 }
Пример #3
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="Material">历元信息</param>
 /// <param name="Adjustment">平差信息</param>
 /// <param name="NameBuilder">参数名称</param>
 public SimpleGnssResult(
     TMaterial Material,
     AdjustResultMatrix Adjustment,
     GnssParamNameBuilder NameBuilder) : base(Adjustment)
 {
     this.Material = Material;
 }
        /// <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);
            }
        }
Пример #5
0
 /// <summary>
 /// 精 通用单站单频计算,高度可配置构造函数。
 /// </summary>
 /// <param name="receiverInfo">接收信息</param>
 /// <param name="Adjustment">平差</param>
 /// <param name="paramNames">参数名称</param>
 public CommonSingeFreqGnssResult(
     EpochInformation receiverInfo,
     AdjustResultMatrix Adjustment, GnssParamNameBuilder positioner
     )
     : base(receiverInfo, Adjustment, positioner)
 {
 }
Пример #6
0
 /// <summary>
 /// 单站单历元GNSS计算预留测试类
 /// </summary>
 /// <param name="receiverInfo">接收信息</param>
 /// <param name="Adjustment">平差</param>
 /// <param name="positioner">定位器</param>
 /// <param name="baseParamCount">基础参数数量</param>
 public SingeSiteGnssExtentResult(
     EpochInformation receiverInfo,
     AdjustResultMatrix Adjustment,
     GnssParamNameBuilder positioner,
     int baseParamCount = 5
     )
     : base(receiverInfo, Adjustment, positioner)
 {
 }
Пример #7
0
 /// <summary>
 /// 以观测信息进行初始化
 /// </summary>
 /// <param name="Adjustment">平差</param>
 /// <param name="BasePrn">基准星</param>
 /// <param name="PeriodDifferInfo">区间差分信息</param>
 /// <param name="lastPppResult">最后结果</param>
 public TwoSitePeriodDifferPositionResult(
     MultiSitePeriodInfo PeriodDifferInfo,
     AdjustResultMatrix Adjustment,
     SatelliteNumber BasePrn,
     GnssParamNameBuilder nameBuilder)
     : base(PeriodDifferInfo, Adjustment, nameBuilder)
 {
     this.BasePrn = BasePrn;
 }
Пример #8
0
 /// <summary>
 /// 精密单点定位结果构造函数。
 /// </summary>
 /// <param name="receiverInfo">接收信息</param>
 /// <param name="Adjustment">平差</param>
 /// <param name="positioner">名称</param>
 /// <param name="baseParamCount">基础参数数量</param>
 public RecursiveIonoFreePppResult(
     EpochInformation receiverInfo,
     AdjustResultMatrix Adjustment,
     GnssParamNameBuilder positioner,
     int baseParamCount = 5
     )
     : base(receiverInfo, Adjustment, positioner)
 {
 }
Пример #9
0
 /// <summary>
 /// 双差差分定位结果。具有模糊度。
 /// </summary>
 /// <param name="Adjustment"></param>
 /// <param name="BasePrn"></param>
 /// <param name="DifferPositionOption"></param>
 /// <param name="PeriodDifferInfo"></param>
 /// <param name="nameBuilder"></param>
 public PeriodDoubleDifferPositionResult(
     MultiSitePeriodInfo PeriodDifferInfo,
     AdjustResultMatrix Adjustment,
     SatelliteNumber BasePrn,
     GnssProcessOption DifferPositionOption, GnssParamNameBuilder nameBuilder)
     : base(PeriodDifferInfo, Adjustment, BasePrn, nameBuilder)
 {
     this.Option = DifferPositionOption;
 }
Пример #10
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="mInfo">历元观测信息</param>
 /// <param name="Adjustment"></param>
 /// <param name="positioner"></param>
 /// <param name="baseSatPrn"></param>
 /// <param name="baseParamCount"></param>
 public RecursiveNetDoubleDifferPositionResult(
     MultiSiteEpochInfo mInfo,
     AdjustResultMatrix Adjustment,
     GnssParamNameBuilder positioner,
     SatelliteNumber baseSatPrn,
     int baseParamCount = 5
     )
     : base(mInfo, Adjustment, positioner)
 {
 }
 /// <summary>
 /// 简易近距离单历元载波相位双差
 /// </summary>
 /// <param name="material"></param>
 /// <param name="Adjustment"></param>
 /// <param name="positioner"></param>
 /// <param name="baseSatPrn"></param>
 public EpochDoubleDifferPositionResult(
     MultiSiteEpochInfo material,
     AdjustResultMatrix Adjustment,
     GnssParamNameBuilder positioner,
     SatelliteNumber baseSatPrn
     )
     : base(material, Adjustment, positioner)
 {
     this.BasePrn = baseSatPrn;
     this.Option  = positioner.Option;
 }
Пример #13
0
 /// <summary>
 /// GNSS结果构造函数
 /// </summary>
 /// <param name="epochInfo">历元信息</param>
 /// <param name="Adjustment">平差信息</param>
 /// <param name="NameBuilder">参数生成器</param>
 public BaseGnssResult(
     TMaterial epochInfo,
     AdjustResultMatrix Adjustment,
     GnssParamNameBuilder NameBuilder, bool isTopSpeed = false)
     : base(epochInfo, Adjustment, NameBuilder)
 {
     this.Name        = epochInfo.Name;
     this.MaterialObj = epochInfo;
     if (!isTopSpeed)
     {
         TrySetCommonParamValues(Adjustment);
     }
 }
        public override List <string> BuildParamNames()
        {
            // this.ParamNames = GnssParamNameBuilder.SetBasePrn(this.CurrentBasePrn).SetPrns(this.EnabledPrns).Build();
            GnssParamNameBuilder.SetBasePrn(this.CurrentBasePrn).SetPrns(this.EnabledPrns).SetSatelliteTypes(this.CurrentMaterial.SatelliteTypes);

            if (SatelliteNumber.IsNullOrDefault(this.CurrentBasePrn))
            {
                throw new Geo.ShouldNotHappenException("请设置基础卫星");
            }
            List <SatelliteNumber> enabledPrns = new List <SatelliteNumber>();

            //双差才参数名称,只有坐标和模糊度互差
            List <string> ParamNames = new List <string>(Gnsser.ParamNames.Dxyz);

            if (this.BaseParamCount == 4)
            {
                ParamNames.Add(Gnsser.ParamNames.WetTropZpd);
            }
            if (this.BaseParamCount == 5)
            {
                ParamNames.Add(Gnsser.ParamNames.WetTropZpd); ParamNames.Add(Gnsser.ParamNames.RefWetTrop);
            }

            foreach (var prn in this.EnabledPrns)
            {
                if (prn.Equals(this.CurrentBasePrn))
                {
                    continue;
                }
                string paramname = prn + Gnsser.ParamNames.Pointer + this.CurrentBasePrn + Gnsser.ParamNames.DoubleDifferL1AmbiguitySuffix;
                ParamNames.Add(paramname);
            }

            foreach (var prn in this.EnabledPrns)
            {
                if (prn.Equals(this.CurrentBasePrn))
                {
                    continue;
                }
                string paramname = prn + Gnsser.ParamNames.Pointer + this.CurrentBasePrn + Gnsser.ParamNames.DoubleDifferL2AmbiguitySuffix;
                ParamNames.Add(paramname);
            }
            return(ParamNames);
        }
        /// <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++;
                }
            }
        }
        /// <summary>
        /// 观测名称
        /// </summary>
        /// <returns></returns>
        public List <string> GetObsNames()
        {
            var names         = new string[ObsCount];
            int rangeRow      = 0;
            int siteCount     = CurrentMaterial.Count;
            int rangeRowCount = this.ObsCount / 2;

            foreach (var prn in this.EnabledPrns)
            {
                if (prn == CurrentBasePrn)
                {
                    continue;
                }

                int phaseRow = rangeRow + rangeRowCount;
                names[rangeRow] = GnssParamNameBuilder.GetDoubleDifferObsPCodeName(prn, CurrentBasePrn);
                names[phaseRow] = GnssParamNameBuilder.GetDoubleDifferObsLCodeName(prn, CurrentBasePrn);
                rangeRow++;
            }
            return(new List <string>(names));
        }
Пример #17
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);
                }
            }
        }
        /// <summary>
        /// 观测名称
        /// </summary>
        /// <returns></returns>
        public List <string> GetObsNames()
        {
            var names      = new string[ObsCount];
            int siteCount  = CurrentMaterial.Count;
            var epochCount = this.EpochCount;
            int rowIndex   = 0;

            for (int epochIndex = 0; epochIndex < epochCount; epochIndex++)
            {
                foreach (var prn in this.EnabledPrns)
                {
                    if (prn == CurrentBasePrn)
                    {
                        continue;
                    }

                    names[rowIndex] = GnssParamNameBuilder.GetDoubleDifferObsCodeNameOfPhase(prn, CurrentBasePrn, epochIndex);
                    rowIndex++;
                }
            }
            return(new List <string>(names));
        }
Пример #19
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++;
                }
            }
        }
Пример #20
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++;
                }
            }
        }
Пример #21
0
 /// <summary>
 /// 以观测信息进行初始化
 /// </summary>
 /// <param name="epochInfo">历元观测信息</param>
 /// <param name="PointPositionType">单点定位类型</param>
 public RangePointPositionResult(
     EpochInformation epochInfo,
     AdjustResultMatrix Adjustment, GnssParamNameBuilder positioner)
     : base(epochInfo, Adjustment, positioner)
 {
 }
Пример #22
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="epochInfo"></param>
 /// <param name="adjust"></param>
 /// <param name="nameBuilder"></param>
 public MultiSiteGnssResult(MultiSiteEpochInfo epochInfo, AdjustResultMatrix adjust, GnssParamNameBuilder nameBuilder)
     : base(epochInfo, adjust, nameBuilder)
 {
 }
Пример #23
0
 /// <summary>
 /// 单站GNSS结果
 /// </summary>
 /// <param name="epochInfo"></param>
 /// <param name="adjust"></param>
 /// <param name="nameBuilder"></param>
 public SingleSiteGnssResult(EpochInformation epochInfo, AdjustResultMatrix adjust, GnssParamNameBuilder nameBuilder, bool isTopSpeed = false)
     : base(epochInfo, adjust, nameBuilder, isTopSpeed)
 {
     if (!isTopSpeed)
     {
         this.DilutionOfPrecision = new DilutionOfPrecision(epochInfo);
     }
 }
Пример #24
0
 /// <summary>
 /// 单站多历元单频GNSS计算
 /// </summary>
 /// <param name="epochInfo"></param>
 /// <param name="adjust"></param>
 /// <param name="nameBuilder"></param>
 public SingleSitePeriodIonoFreePppResult(PeriodInformation epochInfo, AdjustResultMatrix adjust, GnssParamNameBuilder nameBuilder)
     : base(epochInfo, adjust, nameBuilder)
 {
 }
 /// <summary>
 /// 单历元双站双差
 /// </summary>
 /// <param name="epochInfo"></param>
 /// <param name="adjust"></param>
 /// <param name="nameBuilder"></param>
 public DualSiteEpochDoubleDifferResult(MultiSiteEpochInfo epochInfo, AdjustResultMatrix adjust, GnssParamNameBuilder nameBuilder)
     : base(epochInfo, adjust, nameBuilder)
 {
     this.Option = nameBuilder.Option;
 }