/// <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; } } }
/// <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) { }
/// <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); } }
/// <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) { }
/// <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) { }
/// <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; }
/// <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) { }
/// <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; }
/// <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; }
/// <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)); }
/// <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)); }
/// <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++; } } }
/// <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="PointPositionType">单点定位类型</param> public RangePointPositionResult( EpochInformation epochInfo, AdjustResultMatrix Adjustment, GnssParamNameBuilder positioner) : base(epochInfo, Adjustment, positioner) { }
/// <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) { }
/// <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); } }
/// <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; }