private void button_inter_Click(object sender, EventArgs e) { double interval = double.Parse(this.textBox_interval.Text); List <AtomicClock> sortedRecords = this.bindingSource_clk.DataSource as List <AtomicClock>; if (sortedRecords == null) { MessageBox.Show("请先读取,并删选数据。"); return;; } // Data.ClockDataSource datasource = new Data.ClockDataSource(_clockFile); ClockInterpolator interp = new ClockInterpolator(sortedRecords, 2); this.Clocks = interp.GetAtomicClocks(Time.Parse(from), Time.Parse(to), interval); this.bindingSource_clk.DataSource = this.Clocks; string name = this.comboBox_name.SelectedItem.ToString(); SatelliteNumber prn = SatelliteNumber.Parse(name); this.Ephemerides = sp3File.Gets(SatelliteNumber.Parse(name), Time.Parse(from), Time.Parse(to), interval); this.bindingSource_sp3.DataSource = Ephemerides; ShowComparing(); }
/// <summary> /// 精密单点定位结果构造函数。 /// </summary> /// <param name="receiverInfo">接收信息</param> /// <param name="Adjustment">平差</param> /// <param name="nameBuilder">参数名称生成器</param> public IonoModeledSingleFreqPppResult( EpochInformation receiverInfo, AdjustResultMatrix Adjustment, GnssParamNameBuilder nameBuilder ) : base(receiverInfo, Adjustment, nameBuilder) { this.WetTropoFactor = this.ResultMatrix.Corrected.CorrectedValue[Adjustment.GetIndexOf(Gnsser.ParamNames.WetTropZpd)]; //处理模糊度 this.AmbiguityDic = new Dictionary <SatelliteNumber, double>(); int length = receiverInfo.EnabledSatCount * 2 + 5; Vector vector = Adjustment.Corrected.CorrectedValue; for (int i = 5 + receiverInfo.EnabledSatCount; i < 5 + receiverInfo.EnabledSatCount; i++) { SatelliteNumber prn = receiverInfo[i - 5 - receiverInfo.EnabledSatCount].Prn; //double val = vector[i]; //double[] AmbiguityItem = new double[1]; //AmbiguityItem[0] = val; ////AmbiguityItem[1] = vector[i + receiverInfo.EnabledSatCount]; //AmbiguityDic.Add(prn, val); } }
private void GetPredictedClockBias(string PredictedClockBiasPath) { bool isEnd = false; using (StreamReader sr = new StreamReader(PredictedClockBiasPath)) { string line = sr.ReadLine(); string[] sat = SinexCoord.SplitByBlank(line); while (!isEnd) { line = sr.ReadLine(); if (line == null || line == "") { break; } if (line.Length == 0) { isEnd = false; } string[] tmp = SinexCoord.SplitByBlank(line); Time time = Time.Parse(tmp[0]); clockbias cc = new clockbias(); for (int i = 0; i < sat.Length; i++) { cc.sat.Add(SatelliteNumber.Parse(sat[i + 1]), double.Parse(tmp[i + 1])); } ClockBias.Add(time, cc); } } }
/// <summary> /// 返回指定时间段,文件记录的星历信息。 /// 需要计算,计算太多是否浪费资源? /// </summary> /// <param name="prn"></param> /// <param name="from"></param> /// <param name="to"></param> /// <returns></returns> public override List <Gnsser.Ephemeris> Gets(SatelliteNumber prn, Time from, Time to) { List <EphemerisParam> list = NavFile.GetEphemerisParams(prn, from, to); List <Gnsser.Ephemeris> infos = new List <Gnsser.Ephemeris>(); foreach (var item in list) { //if (key.Prn.SatelliteType == SatelliteType.S || key.Prn.SatelliteType == SatelliteType.R || key.Prn.SatelliteType == SatelliteType.E) // infos.Add(new Ephemeris() // { // Time = key.Time, // XYZ = new XYZ(), // Prn = key.Prn, // ClockBias = key.ClockBias, // ClockDrift = key.ClockDrift, // //XyzDot = text. // }); //else //{ XYZ xyz = SatOrbitCaculator.GetSatPos(item, item.Time); infos.Add(new Gnsser.Ephemeris() { Time = item.Time, XYZ = xyz, Prn = item.Prn, ClockBias = item.ClockBias, ClockDrift = item.ClockDrift, //XyzDot = text. }); //} } return(infos); }
/// <summary> /// 获取指定测站,指定卫星的多历元数据向量。 /// 名称为时间。 /// </summary> /// <param name="siteName"></param> /// <param name="prn"></param> /// <param name="dataType"></param> /// <param name="defaultValue"></param> /// <returns></returns> public Vector GetVector(string siteName, SatelliteNumber prn, SatObsDataType dataType, double defaultValue = Double.NaN) { Vector vector = new Vector(this.EpochCount); int i = 0; string name = ""; foreach (var epochSites in this) { double val = defaultValue; name = epochSites.ReceiverTime.ToShortTimeString(); foreach (var epochSite in epochSites) { if (epochSite.Name == siteName) { if (epochSite.Contains(prn)) { val = epochSite[prn][dataType].Value; } } } vector[i] = val; vector.ParamNames[i] = name; } return(vector); }
public override void Correct(EpochSatellite epochSatellite) { Time gpsTime = epochSatellite.RecevingTime; IEphemeris sat = epochSatellite.Ephemeris; SatelliteNumber prn = epochSatellite.Prn; //计算太阳位置方法 //XYZ sunPosition = epochSatellite.EpochInfo.DataSouceProvider.UniverseObjectProvider.GetSunPosition(gpsTime); //新的计算太阳位置方法 Time tutc = gpsTime.GpstToUtc(); //查找地球自转信息 Gnsser.Data.ErpItem erpv = null; if (DataSouceProvider.ErpDataService != null) { erpv = DataSouceProvider.ErpDataService.Get(tutc); } if (erpv == null) { erpv = ErpItem.Zero; } XYZ sunPosition = new XYZ(); DataSouceProvider.UniverseObjectProvider.GetSunPosition(gpsTime, erpv, ref sunPosition); //use L1 value IAntenna antenna = DataSouceProvider.AntennaDataSource.Get(prn.ToString(), gpsTime); if (antenna == null) { return; } string AntennaType = antenna.AntennaType; XYZ svPos = sat.XYZ; XYZ receiverPosition = epochSatellite.SiteInfo.EstimatedXyz; if (receiverPosition.Equals(XYZ.Zero)) { return; } bool cycleSlip = epochSatellite.IsUnstable; if (cycleSlip || !PhaseManager.Contains(prn)) //a cycle slip happend { PhaseManager[prn] = new SatVectorPhase(); } double windUpCorrection = GetSatPhaseWindUpCorectValue(prn, gpsTime, svPos, receiverPosition, sunPosition, AntennaType); //double windUpCorrection2 = GetSatPhaseWindUpCorectValue(satelliteType, gpsTime, svPos, receiverPosition, epochSatellite, sunPosition); this.Correction = (windUpCorrection); }
/// <summary> /// 插值器 /// </summary> /// <param name="prnStr"></param> /// <returns></returns> private ClockInterpolator GetClockInterpolator(string prnStr) { if (clockInterpolators.ContainsKey(prnStr)) { return(clockInterpolators[prnStr]); } lock (locker2) { if (clockInterpolators.ContainsKey(prnStr)) { return(clockInterpolators[prnStr]); } if (SatelliteNumber.IsPrn(prnStr)) { var prn = SatelliteNumber.Parse(prnStr); var items = ClockFile.Get(prn); if (items == null || items.Count == 0) { return(null); } var inter = new ClockInterpolator(items.Values); clockInterpolators.TryAdd(prnStr, inter); return(inter); } } return(null); }
private void button_multiShow_Click(object sender, EventArgs e) { var service = GetFcbDataService(); var timeperiod = this.timePeriodControl1.TimePeriod; SatelliteNumber basePrn = (SatelliteNumber)this.bindingSource_basePrn.Current; ObjectTableStorage table = new ObjectTableStorage("NarrowFcbOfBsd"); var Interval = TimeSpan.FromMinutes(15); for (var time = timeperiod.Start; time <= timeperiod.End; time += Interval) { bool isNullRow = true; foreach (var prn in SatelliteNumber.DefaultGpsPrns) { var bsdFrac = service.GetNLFcbOfBsdValue(time, prn, basePrn); if (bsdFrac != null) { if (isNullRow) { table.NewRow(); table.AddItem("Epoch", time); } table.AddItem(prn.ToString(), bsdFrac); isNullRow = false; } } } this.objectTableControl1.DataBind(table); }
private void button_vewSingleEpoch_Click(object sender, EventArgs e) { var service = GetFcbDataService(); var epoch = new Time(namedTimeControl1.GetValue()); SatelliteNumber basePrn = (SatelliteNumber)this.bindingSource_basePrn.Current; var bsdFrac = service.GetNLFcbOfBsd(epoch, basePrn); StringBuilder sb = new StringBuilder(); sb.AppendLine("NL"); sb.AppendLine(epoch.ToString()); if (bsdFrac != null) { foreach (var item in bsdFrac) { sb.AppendLine(item.Key + ":\t " + item.Value); } } else { sb.AppendLine("No Data!!"); } richTextBoxControl1.Text = sb.ToString(); }
private void button_saveToGnsserFcb_Click(object sender, EventArgs e) { var service = GetFcbDataService(); var timeperiod = this.timePeriodControl1.TimePeriod; SatelliteNumber basePrn = (SatelliteNumber)this.bindingSource_basePrn.Current; var Interval = TimeSpan.FromMinutes(15); var toPath = Path.Combine(Setting.TempDirectory, "WhuNLFcbToGNSSer" + Gnsser.Setting.FcbExtension); using (FcbOfUpdWriter writer = new FcbOfUpdWriter(toPath)) { for (var time = timeperiod.Start; time <= timeperiod.End; time += Interval) { FcbOfUpd fcbOfUpd = new FcbOfUpd(basePrn, time, false); foreach (var prn in SatelliteNumber.DefaultGpsPrns) { var bsdFrac = service.GetNLFcbOfBsdValue(time, prn, basePrn); if (bsdFrac != null) { fcbOfUpd.Add(prn, bsdFrac); } } if (fcbOfUpd.DataCount > 0) { writer.Write(fcbOfUpd); } } } Geo.Utils.FormUtil.ShowOkAndOpenDirectory(Setting.TempDirectory); }
private void button_saveWLToGNSSer_Click(object sender, EventArgs e) { var service = GetFcbDataService(); var timeperiod = this.timePeriodControl1.TimePeriod; SatelliteNumber basePrn = (SatelliteNumber)this.bindingSource_basePrn.Current; var toPath = Path.Combine(Setting.TempDirectory, "WhuWLFcbToGNSSer" + Gnsser.Setting.FcbExtension); using (FcbOfUpdWriter writer = new FcbOfUpdWriter(toPath)) { var Interval = TimeSpan.FromDays(1); for (var time = timeperiod.Start.Date; time <= timeperiod.End; time += Interval) { var bsdFrac = service.GetWLFcbOfBsd(time, basePrn); if (bsdFrac != null && bsdFrac.Count > 0) { FcbOfUpd fcbOfUpd = new FcbOfUpd(basePrn, time, true); foreach (var kv in bsdFrac.KeyValues) { fcbOfUpd.Add(kv.Key, kv.Value); } if (fcbOfUpd.DataCount > 0) { writer.Write(fcbOfUpd); } } } } Geo.Utils.FormUtil.ShowOkAndOpenDirectory(Setting.TempDirectory); }
private void button_multiWLView_Click(object sender, EventArgs e) { var service = GetFcbDataService(); var timeperiod = this.timePeriodControl1.TimePeriod; SatelliteNumber basePrn = (SatelliteNumber)this.bindingSource_basePrn.Current; ObjectTableStorage table = new ObjectTableStorage("WideFcbOfBsd"); var Interval = TimeSpan.FromDays(1); for (var time = timeperiod.Start; time <= timeperiod.End; time += Interval) { var bsdFrac = service.GetWLFcbOfBsd(time, basePrn); if (bsdFrac != null && bsdFrac.Count > 0) { table.NewRow(); table.AddItem("Epoch", time); foreach (var kv in bsdFrac.KeyValues) { table.AddItem(kv.Key.ToString(), kv.Value); } } } this.objectTableControl1.DataBind(table); }
private void button_show_Click(object sender, EventArgs e) { if (ephemerisA == null) { Geo.Utils.FormUtil.ShowErrorMessageBox("读入数据 A 先!"); return; } if (ephemerisB == null) { Geo.Utils.FormUtil.ShowErrorMessageBox("读入数据 B 先!"); return; } if (this.comboBox_prn.SelectedItem == null) { Geo.Utils.FormUtil.ShowWarningMessageBox("没有共同卫星,无法比较!"); return; } SatelliteNumber PRN = SatelliteNumber.Parse(this.comboBox_prn.SelectedItem.ToString()); //每次取10个数计算 sortedRecordsA = ephemerisA.Gets(PRN); sortedRecordsB = ephemerisB.Gets(PRN);//, new Time(this.TimeFrom.Value), new Time(this.TimeTo.Value)); this.bindingSource1.DataSource = sortedRecordsA; this.bindingSource2.DataSource = sortedRecordsB; this.bindingSource3.DataSource = GetDifferEphemeirs(sortedRecordsA, sortedRecordsB); }
private void button_smoothRange_Click(object sender, EventArgs e) { CheckAndReadObsFile(); bool isDualFreIonFree = checkBox_ionoFree.Checked; int smoothWindow = this.namedIntControl_smoothWindow.GetValue(); SatelliteNumber prn = (SatelliteNumber)this.bindingSource_sat.Current; var PhaseSmoothRangeBulider = new NamedCarrierSmoothedRangeBuilderManager(checkBox_isApproved.Checked, smoothWindow, true, IonoDifferCorrectionType.DualFreqCarrier); List <TimedRinexSatObsData> records = ObsFile.GetEpochTimedObservations(prn); if (isDualFreIonFree) { if (ObsFile.Header.ObsInfo.GetFrequenceCount() <= 1) { Geo.Utils.FormUtil.ShowWarningMessageBox("只有一个频率,无法实现无电离层组合!"); return; } DualFreqPhaseSmoothRange(prn, PhaseSmoothRangeBulider); } else { SingleFreqPhaseSmoothRange(prn, PhaseSmoothRangeBulider, records); } }
/// <summary> /// 如果失败则返回 null。 /// </summary> /// <param name="prn"></param> /// <param name="time"></param> /// <returns></returns> protected TProduct LoopGetAndSetCurrentService(SatelliteNumber prn, Time time) { TProduct rst = default(TProduct); List <TService> dayServices = GetMayAvailableServices(prn.SatelliteType, time); if (dayServices == null || dayServices.Count == 0) { log.Info("没有找到服务!" + typeof(TService).ToString()); NulledServices.Add(time.GetGpsWeekAndDay()); this.CurrentService = default(TService); return(rst); } foreach (var item in dayServices) { rst = item.Get(prn, time); if (rst != null) { this.CurrentService = item; this.Name = this.CurrentService.ToString(); log.Info("匹配成功! " + typeof(TProduct).Name + " 服务设置为:" + item.ToString()); return(rst); } } return(rst); }
/// <summary> /// 返回指定时间段,文件记录的星历信息。 /// </summary> /// <param name="prn"></param> /// <param name="from"></param> /// <param name="to"></param> /// <returns></returns> public override List <Gnsser.Ephemeris> Gets(SatelliteNumber prn, Time from, Time to) { List <GlonassNavRecord> list = this.NavFile.Get(prn).FindAll(m => m.Time.DateTime >= from.DateTime && m.Time.DateTime <= to.DateTime); return(GetEphemerisInfos(list)); }
public override void UiToEntity() { base.UiToEntity(); Option.IsBaseSiteRequried = this.checkBox_IsBaseSiteRequried.Checked; Option.IndicatedBaseSiteName = this.namedStringControl_BaseSiteName.GetValue(); Option.IndicatedPrn = SatelliteNumber.Parse(this.enabledStringControl_IndicatedPrn.GetEnabledValue().Value); Option.IsIndicatedPrn = this.enabledStringControl_IndicatedPrn.GetEnabledValue().Enabled; Option.BaseLineSelectionType = this.enumRadioControl_BaseLineSelectionType.GetCurrent <BaseLineSelectionType>(); Option.BaseSatSelectionType = this.enumRadioControl_baseSatSelectionType.GetCurrent <Gnsser.BaseSatSelectionType>(); Option.MaxDistanceOfShortBaseLine = this.namedFloatControl_maxShotBaseLine.Value; Option.MinDistanceOfLongBaseLine = this.namedFloatControl_MinDistanceOfLongBaseLine.Value; Option.BaseLineFilePath = fileOpenControl_baselineFile.FilePath; Option.CenterSiteName = namedStringControl_ceterSiteName.GetValue(); this.Option.BaseSiteSelectType = this.enumRadioControl_BaseSiteSelectType.GetCurrent <BaseSiteSelectType>(); //手动输入 double levelFixed = this.namedFloatControl_fixedErrorLevel.GetValue(); double verticalFixed = this.namedFloatControl_fixedErrorVertical.GetValue(); double levelCoeef = this.namedFloatControl_levelCoefOfProprotion.GetValue(); double verticalCoeef = this.namedFloatControl_verticalCoefOfProprotion.GetValue(); Option.GnssReveiverNominalAccuracy = new GnssReveiverNominalAccuracy(levelFixed, verticalFixed, levelCoeef, verticalCoeef); }
public override bool IsAvailable(SatelliteNumber prn, Time satTime) { log.Warn("Glonass 的 IsHealth 方法并没有实现!"); return(true); throw new NotImplementedException(); }
/// <summary> /// 获取窗口 /// </summary> /// <param name="prn"></param> /// <param name="frequenceType"></param> /// <returns></returns> public TimeNumeralWindowData GetBufferValues(SatelliteNumber prn, FrequenceType frequenceType) { TimeNumeralWindowData window = new TimeNumeralWindowData(WindowSize); var buffer = this.Buffers; //首先从过去的 var lastWindowOfP1 = LastWindowDataManager.GetOrCreate(BuildKey(prn, frequenceType)); window.Add(lastWindowOfP1); //然后从bufffer里面提取另一半 var bufferOfEpoches = buffer.GetSubList(0, HalfWindowSize); foreach (var epoch in bufferOfEpoches) { if (epoch.Contains(prn)) { var sat = epoch[prn]; var time = epoch.ReceiverTime; var p = sat[frequenceType].PseudoRange.Value;//原始数据 window.Add(time, p); } } return(window); }
/// <summary> /// 构造函数 /// </summary> /// <param name="pathes"></param> public WideLaneOfBsdSolver(ObjectTableManager SmoothedMwValue, SatelliteNumber BasePrn, int MinSiteCount, int MinEpoch, string OutputDirectory = null) : base("WL", BasePrn, OutputDirectory) { this.MinSiteCount = MinSiteCount; this.MinEpoch = MinEpoch; this.SmoothedMwValue = SmoothedMwValue; }
/// <summary> /// 创建一个 /// </summary> /// <param name="key"></param> /// <returns></returns> public override TimedSatObject <TEntity> Create(SatelliteNumber key) { return(new TimedSatObject <TEntity>(key) { IsSameSourceRequired = IsSameSourceRequired, SourceCode = SourceCode }); }
/// <summary> /// 传统构造函数。 /// </summary> /// <param name="pathesOfWLInt"></param> /// <param name="pppPathes"></param> /// <param name="IsOutputInEachDirectory"></param> /// <param name="OutputDirectory"></param> public MultiPeriodNarrowLaneOfBsdSolver(string[] pathesOfWLInt, string[] pppPathes, int removeCountOfEachSegment, bool IsOutputInEachDirectory, string OutputDirectory) { //读取宽巷的整数解 //分基准星计算 this.IsOutputInEachDirectory = IsOutputInEachDirectory; this.OutputDirectory = OutputDirectory; this.IntOfWLPathes = new Dictionary <SatelliteNumber, List <string> >(); SatelliteNumber basePrn = new SatelliteNumber(); foreach (var path in pathesOfWLInt) { basePrn = SatelliteNumber.Parse(Path.GetFileName(path).Substring(4, 3)); if (IntOfWLPathes.ContainsKey(basePrn)) { IntOfWLPathes[basePrn].Add(path); } else { IntOfWLPathes[basePrn] = new List <string>(); IntOfWLPathes[basePrn].Add(path); } } this.FloatAmbiguitiesOfPpp = PppTableResultFileReader.ReadPppAmbiResultInCycle(pppPathes); //修理浮点解 FloatAmbiguitiesOfPpp.RemoveStartRowOfEachSegment(removeCountOfEachSegment); MaxAllowedDiffer = 0.25; }
/// <summary> /// 针对某一个卫星绘制 /// </summary> /// <param name="prn"></param> /// <returns></returns> private ObjectTableStorage BuildObjectTable(SatelliteNumber prn) { bool isCarrierInLen = checkBox_carrrierInLen.Checked; bool isShowL1Only = checkBox_showL1Only.Checked; List <TimedRinexSatObsData> records = ObsFile.GetEpochTimedObservations(prn); ObjectTableStorage table = new ObjectTableStorage(); foreach (var record in records) { table.NewRow(); table.AddItem("Epoch", record.Time); foreach (var item in record.SatObsData) { if (isShowL1Only && !item.Key.Contains("1")) { continue; } if (isCarrierInLen && item.Key.Contains("L1")) { var freq = Frequence.GetFrequence(prn, FrequenceType.A, record.Time); table.AddItem(item.Key, item.Value.Value * freq.WaveLength); } else if (isCarrierInLen && item.Key.Contains("L2")) { var freq = Frequence.GetFrequence(prn, FrequenceType.B, record.Time); table.AddItem(item.Key, item.Value.Value * freq.WaveLength); } else { table.AddItem(item.Key, item.Value.Value); } } } return(table); }
/// <summary> /// 对载波距离进行修正,若超出一定的距离。 /// </summary> /// <param name="prn"></param> /// <param name="freqType"></param> /// <param name="PhaseRangeMinusPseudorange"></param> /// <returns></returns> private double RevisePhaseRange(SatelliteNumber prn, FrequenceType freqType, double PhaseRangeMinusPseudorange) { if (!PreviousData.ContainsKey(prn)) { PreviousData[prn] = new Dictionary <FrequenceType, double>(); } if (!PreviousData[prn].ContainsKey(freqType)) { PreviousData[prn][freqType] = 0; } else { var prevValue = PreviousData[prn][freqType]; if (PhaseRangeMinusPseudorange < prevValue - 750.0) { PhaseRangeMinusPseudorange += 1500.0; } else if (PhaseRangeMinusPseudorange > prevValue + 750.0) { PhaseRangeMinusPseudorange -= 1500.0; } } PreviousData[prn][freqType] = PhaseRangeMinusPseudorange; return(PhaseRangeMinusPseudorange); }
/// <summary> /// 双差网解定位。具有模糊度。 /// </summary> /// <param name="mInfo">历元观测信息</param> /// <param name="Adjustment"></param> /// <param name="positioner"></param> /// <param name="baseSatPrn"></param> /// <param name="baseParamCount"></param> public NetDoubleDifferPositionResult( MultiSiteEpochInfo mInfo, AdjustResultMatrix Adjustment, GnssParamNameBuilder positioner, SatelliteNumber baseSatPrn, int baseParamCount = 5 ) : base(mInfo, Adjustment, positioner) { //设置第一个流动站坐标改正数 int i = 0; var estmated = this.ResultMatrix.Estimated; foreach (var paramName in estmated.ParamNames) { if (paramName.Contains(Gnsser.ParamNames.Dx)) { double x = estmated[i]; double y = estmated[i + 1]; double z = estmated[i + 2]; this.XyzCorrection = new XYZ(x, y, z); break; } } }
/// <summary> /// 相位模糊度模型 /// </summary> /// <param name="prn"></param> /// <param name="stdDev"></param> /// <param name="stdDevWhenCycled"></param> public SingleSatPhaseAmbiguityModel(SatelliteNumber prn, double stdDev, double stdDevWhenCycled) { VarianceWhenCycled = stdDevWhenCycled * stdDevWhenCycled; this.Variance = stdDev * stdDev; this.HasCycleSlip = true; this.Prn = prn; }
/// <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="prn"></param> /// <param name="time"></param> /// <returns></returns> public TProduct Get(SatelliteNumber prn, Time time) { if (CurrentService != null) { var result = CurrentService.Get(prn, time); if (result == null) { //重新选择服务。 log.Warn(this.Name + " " + prn + " 在 " + time + " 获取 " + typeof(TProduct).Name + " 失败!"); if (IsSwitchWhenEphemerisNull) { log.Info(typeof(TProduct).Name + " " + this.Name + "尝试重新选择服务"); return(LoopGetAndSetCurrentService(prn, time)); } } return(result); } if (NulledServices.Contains(time.GetGpsWeekAndDay())) { return(default(TProduct)); } TProduct rst = LoopGetAndSetCurrentService(prn, time); return(rst); }
/// <summary> /// 生成。 /// </summary> /// <returns></returns> public override List <string> Build() { if (SatelliteNumber.IsNullOrDefault(BasePrn)) { throw new Geo.ShouldNotHappenException("请设置基础卫星"); } List <SatelliteNumber> enabledPrns = new List <SatelliteNumber>(); //双差才参数名称,只有坐标和模糊度互差 List <string> ParamNames = new List <string>(Gnsser.ParamNames.Dxyz); if (this.BaseParamCount == 4) { ParamNames.Add(Gnsser.ParamNames.WetTropZpd); } if (this.BaseParamCount == 5) { ParamNames.Add(Gnsser.ParamNames.WetTropZpd); ParamNames.Add(Gnsser.ParamNames.RefWetTrop); } foreach (var prn in this.EnabledPrns) { if (prn.Equals(BasePrn)) { continue; } ParamNames.Add(GetParamName(prn)); } return(ParamNames); }
private void ShowComparing() { //比较 List <ClockLite> compares = new List <ClockLite>(); foreach (var item in Clocks) { Ephemeris eph = Ephemerides.Find(m => m.Time.Equals(item.Time)); if (eph == null) { continue; } ClockLite c = new ClockLite() { Prn = item.Prn == null?SatelliteNumber.Parse(item.Name) : item.Prn, GpsTime = item.Time, Offset = item.ClockBias - eph.ClockBias, Drift = item.ClockDrift - eph.ClockDrift }; c.Distance = c.Offset * GnssConst.LIGHT_SPEED; compares.Add(c); } this.bindingSource_comparing.DataSource = compares; }