/// <summary> /// 数值克隆 /// </summary> /// <returns></returns> internal FreqenceObservation DataClone() { FreqenceObservation info = new FreqenceObservation(this.Frequence, this.FrequenceType); foreach (var item in this.Data) { info[item.Key] = item.Value.ValueClone(); } return(info); }
/// <summary> /// 构建,如果可以,默认支持3个频率 /// </summary> /// <returns></returns> public override EpochSatellite Build(RinexSatObsData observtion) { EpochSatellite epochSat = new EpochSatellite(this.EpochInfo, prn); //需要重新修改,RINEX 3.0 有的对 BDS 是 C1,C7, C6,3.02 明确规定是 C2, C7, C6 Dictionary <FrequenceType, List <int> > freqDic = ObsCodeConvert.GetRinexFreqIndexDic(observtion.Prn.SatelliteType); //新算法,2018.09.24,hmx var freqNums = observtion.GetFrequenceNums(); foreach (var num in freqNums) { var prn = observtion.Prn; FrequenceType freqType = ObsCodeConvert.GetFrequenceType(freqDic, num); Frequence band = Frequence.GetFrequence(prn, freqType, Time); if (band == null) { band = Frequence.Default; log.Warn("系统并未设置 " + prn.SatelliteType + " 的第 " + freqType + " 频率, 以 " + band + " 代替 !"); } FreqenceObservation freqObs1 = FreqObsBuilder .SetFrequenceType(freqType) .SetFrequence(band) .SetRinexFrequenceNumber(num) .Build(observtion); epochSat.Set(freqObs1.FrequenceType, freqObs1); } //次新算法,比较繁琐,2018 //List<FrequenceType> builded = new List<FrequenceType>(); //foreach (var item in observtion) //{ // var num = Geo.Utils.StringUtil.GetNumber(item.Key); // FrequenceType freqType = ObsCodeConvert.GetFrequenceType(freqDic, num);// (FrequenceType)(builedFreq.IndexOf(num) + 1); // if (!builded.Contains(freqType)) { builded.Add(freqType); } // else { continue; } // FreqenceObservation freqObs1 = FreqObsBuilder // .SetFrequenceType(freqType) // .SetRinexFrequenceNumber(num) // .Build(observtion); // epochSat.Set(freqObs1.FrequenceType, freqObs1); //} /** //老算法,只支持3个频率 #region 转换观测值到频率A、频率B、频率C的基本观测值 * //第一频率 * FreqenceObservation freqObs = FreqObsBuilder * .SetFrequenceType(FrequenceType.A).Build(observtion); * epochSat.Set(freqObs.FrequenceType, freqObs); * * //第二频率 * freqObs = FreqObsBuilder * .SetFrequenceType(FrequenceType.B).Build(observtion); * if (freqObs != null) epochSat.Set(freqObs.FrequenceType, freqObs); * * //第三频率 * freqObs = FreqObsBuilder * .SetFrequenceType(FrequenceType.C).Build(observtion); * if (freqObs != null) epochSat.Set(freqObs.FrequenceType, freqObs); #endregion */ return(epochSat); }