/// <summary> /// 读取一个历元的数据 /// </summary> /// <param name="lines"></param> /// <param name="lineNum"></param> /// <returns></returns> public SP3Epoch DecodeEpoch(string[] lines, ref int lineNum) { SP3Epoch epoch = new SP3Epoch(); epoch.Epoch = GPST.Decode(lines[lineNum].Substring(1)); Dictionary <string, SP3Sat> allSat = new Dictionary <string, SP3Sat>(); int i = lineNum + 1; for (; i < lines.Length; i++) { if (lines[i].StartsWith("*")) { break; } else if (lines[i].StartsWith("EOF")) { break; } SP3Sat sat = DecodeSat(lines[i]); epoch.AllSat.Add(sat.Prn, sat); } lineNum = i; return(epoch); }
/// <summary> /// 尝试读取数据 /// </summary> /// <returns></returns> public bool TryRead() { if (!File.Exists(Path)) { return(false); } string[] lines; try { lines = File.ReadAllLines(Path); } catch (Exception ex) { return(false); } if (Header is null) { Header = new SP3Header(); } //// Line1 Header.Version = lines[0].Substring(0, 2); Header.P_V_Flag = lines[0][2].ToString(); Header.StartTime = GPST.Decode(lines[0].Substring(3, 23)); Header.EpochNum = Int32.Parse(lines[0].Substring(32, 7).Trim());//读完数据之后会更改此值 Header.Data_Used = lines[0].Substring(40, 5).Trim(); Header.Coordinate_Sys = lines[0].Substring(46, 5).Trim(); Header.OrbitType = lines[0].Substring(52, 3).Trim(); Header.Agency = lines[0].Substring(56, 4).Trim(); //// Line2 int weeks; double seconds; weeks = Convert.ToInt32(lines[1].Substring(3, 4).Trim()); seconds = Convert.ToDouble(Math.Floor(Double.Parse(lines[1].Substring(8, 15).Trim()))); Header.StartGPSTime = new GPST(weeks, seconds); Header.Epoch_Interval = Double.Parse(lines[1].Substring(24, 14).Trim()); //读取卫星PRN号,3-7行 Header.Num_Sats = Int32.Parse(lines[2].Substring(4, 2).Trim()); Header.SatPRN = new List <string>(); for (int ii = 0; ii < 5; ii++) { int j = 10; for (j = 10; j < 59; j = j + 3) { if (lines[2 + ii].Substring(j - 1, 3).Trim() != "0") { Header.SatPRN.Add(lines[2 + ii].Substring(j - 1, 3).Trim()); } } } //读取卫星精度,8-12行 Header.SatAccuracy = new List <string>(); int i = 0; for (int ii = 0; ii < 5; ii++) { int j = 10; if (i < Header.Num_Sats) { for (j = 10; j < 59; j = j + 3) { Header.SatAccuracy.Add(lines[7 + ii].Substring(j - 1, 3).Trim()); i = i + 1; if (i >= Header.Num_Sats) { break; } } } } for (i = 22; i < lines.Length; i++) { if (lines[i].StartsWith("EOF")) { break; } if (lines[i].StartsWith("*")) { SP3Epoch epoch = DecodeEpoch(lines, ref i); i--; AllEpoch.Add(epoch); } } return(true); }