/// <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); } }
/// <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++; } } }
/// <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="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)]; } }
/// <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; } }
/// <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); } } } }