Пример #1
0
        /// <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);
        }
Пример #2
0
 /// <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;
 }
Пример #3
0
        /// <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);
        }