/// <summary> /// 单站单天解 /// </summary> public void ResolveSingleStationSingleDay() { if (string.IsNullOrWhiteSpace(obsFolder)) { FrmIono.MessHelper.Print("\r\n文件夹不存在:" + obsFolder); return; } DirectoryInfo dir = new DirectoryInfo(obsFolder); var files = dir.GetFiles("*.??o"); for (int i = 0; i < files.Length; i++) { FrmIono.MessHelper.Print(string.Format("\r\n{0}:{1}", DateTime.Now, "开始读取文件:" + files[i].Name)); try { OFile of = new OFile(files[i].FullName); if (of.TryRead()) { int year, doy; string stationName; FileName.ParseRinex2(files[i].Name, out stationName, out doy, out year); // 下载星历 Dictionary <string, List <DOY> > doys = new Dictionary <string, List <DOY> >(); doys.Add(stationName, new List <DOY> { new DOY(year, doy) }); if (!Download(doys)) { PrintWithTime("下载星历失败!"); return; } DOY fileDOY = new DOY(year, doy); DOY start = fileDOY.AddDays(-1); DOY end = fileDOY.AddDays(1); // 读取星历 PrintWithTime("正在读取星历..."); Orbit orb = new Orbit(orbFolder); orb.GetAllSp3Files(orbFolder, start, end); orb.Read(orbFolder); // 计算轨道 PrintWithTime("正在计算轨道..."); for (int j = 0; j < of.Epoches.Count; j++) { var epo = of.Epoches[j]; orb.GetSatPos(ref epo); } //探测粗差 PrintWithTime("正在探测粗差..."); of.DetectOutlier(); // 探测弧段 of.DetectAllArcs(); // 探测周跳 PrintWithTime("正在探测周跳..."); of.DetectCycleSlip(); // 计算穿刺点 of.CalIPP(); // 相位平滑伪距 PrintWithTime("正在计算VTEC..."); of.CalSP4(); // 计算VTEC of.CalVTEC(); // 多项式拟合 Print("正在拟合多项式..."); if (FitType == enumFitType.Polynomial) { of.Fit(); } else if (FitType == enumFitType.DoubleDifference) { of.DoubleDifference(); } else if (FitType == enumFitType.Smooth) { of.Smooth(); } // 输出结果 PrintWithTime("正在写入文件..."); of.WriteTEC(resFolder); } else { FrmIono.MessHelper.Print(string.Format("\r\n{0}:{1}", DateTime.Now, "读取文件失败!")); } } catch (Exception e) { FrmIono.MessHelper.Print(string.Format("\r\n{0}:{1}:{2}", DateTime.Now, "解算失败,原因是", e.ToString())); } } }