示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }