/// <summary> /// 构建观测历元。 /// </summary> /// <param name="row"></param> /// <param name="indexColName"></param> /// <returns></returns> public RinexEpochObservation BuildObs(Dictionary <String, object> row, string indexColName) { var obs = new RinexEpochObservation(); obs.ReceiverTime = new Geo.Times.Time((DateTime)row[indexColName]); foreach (var item in row) { var name = item.Key; if (name == indexColName) { continue; } var code = name.Substring(4); var prn = SatelliteNumber.Parse(name); if (!obs.Contains(prn)) { obs[prn] = new RinexSatObsData(prn); } var obsValue = new RinexObsValue((double)item.Value, code); obs[prn].Add(code, obsValue); } return(obs); }
/// <summary> /// 观测量构造函数。 /// </summary> /// <param name="phaseValue">相位观测值</param> /// <param name="Frequence">频率</param> public PhaseRangeObservation(RinexObsValue phaseValue, Frequence Frequence) : base(phaseValue.Value * Frequence.WaveLength, phaseValue.ObservationCode) { this.Frequence = Frequence; this.RawPhaseValue = phaseValue.Value; this.LossLockIndicator = phaseValue.LossLockIndicator; this.SignalStrength = phaseValue.SignalStrength; }
/// <summary> /// 创建,转换为RINEX格式 /// </summary> /// <param name="epochSat"></param> /// <returns></returns> public override RinexSatObsData Build(EpochSatellite epochSat) { RinexSatObsData rinex = new RinexSatObsData(); rinex.Prn = epochSat.Prn; foreach (var observtion in epochSat) { //C1 ,可能有多种伪距的情况 var cc = observtion.GetPseudoRanges(); foreach (var c in cc) { RinexObsValue C = new RinexObsValue(c.Value, c.ObservationCode); var obsCode = c.ObservationCode; if (IsUseCorrectedOfRange) //观测值更新 { C.Value = c.CorrectedValue; if (c.ContainsCorrection(CorrectionNames.DcbP1C1.ToString())) { ObservationCode.ChagngeCaToP(ref obsCode); } } var rinexCode = c.ObservationCode.GetRinexCode(RinexVersion); rinex.Add(rinexCode, C); } //L1 var l = observtion.PhaseRange; RinexObsValue L = new RinexObsValue(l.RawPhaseValue, l.ObservationCode); L.LossLockIndicator = observtion.PhaseRange.LossLockIndicator; //还给你 if (epochSat.IsUnstable) //如果探测出周跳,则重新标记为有周跳。 { L.LossLockIndicator = LossLockIndicator.CyclePossible1; } L.SignalStrength = observtion.PhaseRange.SignalStrength; var lcode = l.ObservationCode.GetRinexCode(RinexVersion); rinex.Add(lcode, L); } return(rinex); }