/// <summary> /// 计算的等效模糊度距离。 /// 如果有则返回,若无返回0。 /// </summary> /// <param name="satelliteType"></param> /// <returns></returns> public double GetAmbiguityDistace(SatelliteNumber prn) { if (AmbiguityDic.ContainsKey(prn)) { return(AmbiguityDic[prn]); } else { return(0); } }
//public ClockEstimationResult( // MultiSitePeriodInfo epochInfo, // Adjustment Adjustment, // GnssParamNameBuilder ClockEstimationer, // ClockEstimationResult previousResult = null) // : base(epochInfo, Adjustment, ClockEstimationer) //{ // Vector vector = Adjustment.Corrected; // //update // foreach (var epoch in epochInfo) // { // var keyPrev = NameBuilder.GetReceiverWetTropParamName(epoch); // epoch.NumeralCorrections[Gnsser.ParamNames.Trop] = vector[Adjustment.GetIndexOf(keyPrev)]; // } // 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 key in epochInfo) // { // foreach (var item1 in key) // if (item1.IsUnstable) // { // //PrnWithSlips.Add(item1.Prn); // PrnWithSlipss.Add(key.SiteName + "-" + item1.Prn); // } // } //} /// <summary> /// /// </summary> /// <param name="SiteName"></param> /// <param name="prn"></param> /// <returns></returns> public double GetAmbiguityDistace(string SiteName, SatelliteNumber prn) { if (AmbiguityDic.ContainsKey(SiteName + "-" + prn)) { return(AmbiguityDic[SiteName + "-" + prn]); } else { return(0); } }
/// <summary> /// 计算的等效模糊度距离。 /// 如果有则返回,若无返回0。 /// </summary> /// <param name="prn"></param> /// <returns></returns> public double GetAmbiguityDistace(SatNumberAndFrequence PrnFre) { if (AmbiguityDic.ContainsKey(PrnFre)) { return(AmbiguityDic[PrnFre]); } else { return(0); } }
/// <summary> /// 获取指定测站和卫星的模糊度距离。 /// </summary> /// <param name="siteName"></param> /// <param name="prn"></param> /// <returns></returns> public double GetAmbiguityDistance(string siteName, SatelliteNumber prn) { var key = GetSiteSatMaker(siteName, prn); if (AmbiguityDic.ContainsKey(key)) { return(AmbiguityDic[key]); } else { return(0); } }
/// <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> /// 计算的等效模糊度距离。 /// 如果有则返回,若无返回0。 /// </summary> /// <param name="prn"></param> /// <returns></returns> public double GetFloatAmbiguityCycle(SatelliteNumber prn) { var key = GetSiteSatMaker(SiteInfo.SiteName, prn); var val = 0.0; if (AmbiguityDic.ContainsKey(key)) { val = AmbiguityDic[key]; } var len = 1.0; if (this.Material.EnabledPrns.Contains(prn)) { var waveLength = Frequence.GpsL1.WaveLength; //??? // len = Frequence.GetIonoFreeFrequence(prn.SatelliteType).WaveLength;// this.MaterialObj[prn].Combinations.IonoFreePhaseRange.Frequence.WaveLength; int i = 0; } return(val / len); }
/// <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> /// <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); } } } }
/// <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++; } } }