using DevExpress.XtraMap; using DxHelper; using ExtensionsDev; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Drawing; using System.Linq; using XdCxRhDW.Api; using XdCxRhDW.Dto; using XdCxRhDW.Entity; using XdCxRhDW.Repostory; namespace XdCxRhDW.App.UserControl { public partial class LeoX1GDOPParam : DevExpress.XtraEditors.XtraUserControl { public MapControl mapControl1; public LeoX1GDOP接口 Model => new LeoX1GDOP接口() { EphMain = ucEphXYZMain.EphParam(), EphAdja1 = ucEphXYZAdja1.EphParam(), EphAdja2 = ucEphXYZAdja2.EphParam(), CapTime = txtCapTime.DateTime, DfoErr = Convert.ToDouble(txtDfoErr1.Text), SatLocErr = Convert.ToDouble(txtSatLocErr1.Text), EphVelErr = Convert.ToDouble(txtEphVelErr1.Text), fu1 = Convert.ToDouble(txtFu1.Text) * 1e6, }; private EnumPosResType PosResType; public LeoX1GDOPParam(PosRes item) { InitializeComponent(); this.layoutControl1.UseDefault(); txtCapTime.UseDefault(); this.txtCapTime.DateTime = item.SigTime; this.txtSatLocErr1.EditValue = 10000; this.txtEphVelErr1.EditValue = 0.1; this.txtDfoErr1.EditValue = 0.01; PosResType = item.PosResType; using (RHDWPartContext db = RHDWPartContext.GetContext(item.SigTime)) { var cg = db?.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefault(); var station = db?.StationRes.Where(m => m.ID == item.StationResID).FirstOrDefault(); if (cg != null) { this.txtFu1.EditValue = cg.TarFreqUp.HasValue ? cg.TarFreqUp.Value * 1e-6 : 0; var mainEph = (cg.MainX, cg.MainY, cg.MainZ, cg.MainVx, cg.MainVy, cg.MainVz); ucEphXYZMain.SetParam($"主星", cg.MainCode, mainEph, Color.Black); var adja1Eph = (cg.Adja1X, cg.Adja1Y, cg.Adja1Z, cg.Adja1Vx, cg.Adja1Vy, cg.Adja1Vz); ucEphXYZAdja1.SetParam($"邻星1", cg.Adja1Code, adja1Eph, Color.Black); var adja2Eph = (cg.Adja2X, cg.Adja2Y, cg.Adja2Z, cg.Adja2Vx, cg.Adja2Vy, cg.Adja2Vz); ucEphXYZAdja2.SetParam($"邻星2", cg.Adja2Code, adja2Eph, Color.Black); } } } private bool ParamValidate() { if (!ucEphXYZMain.CheckEph(dxErrorProvider)) { return false; } if (!ucEphXYZAdja1.CheckEph(dxErrorProvider)) { return false; } if (!ucEphXYZAdja2.CheckEph(dxErrorProvider)) { return false; } if (!txtDfoErr1.CheckDouble(dxErrorProvider, "频差误差")) { return false; } if (!txtSatLocErr1.CheckDouble(dxErrorProvider, "星历位置误差")) { return false; } if (!txtEphVelErr1.CheckDouble(dxErrorProvider, "星历速度误差")) { return false; } if (!txtFu1.CheckDouble(dxErrorProvider, "目标上行频点")) { return false; } return true; } private void btnOK_Click(object sender, EventArgs e) { if (!ParamValidate()) { return; } try { //mapControl1.ClearMap(); //var data = GdopHelper.Gdop3SatDFByXyz(Model.EphMain, Model.EphAdja1, Model.EphAdja2, Model.fu1, Model.fu2, Model.DfoErr, Model.SatLocErr, Model.EphVelErr, Model.RefStation); //if (data.Count == 0) //{ // DxHelper.MsgBoxHelper.ShowInfo($"绘制{PosResType.GetEnumDisplayName()}GDOP没有{GdopParam.误差配置.误差距离km.Max()}公里以内的误差!"); // return; //} //foreach (var errLins in data)//画GDOP //{ // var mapDots = errLins.MapDots; // mapControl1.DrawGdopLineTwo(errLins.ErrDistanceKm, mapDots, mapDots.Count() / 2); //} } catch (Exception ex) { DxHelper.MsgBoxHelper.ShowError($"绘制{PosResType.GetEnumDisplayName()}GDOP失败,{ex.Message}"); } } private void btnClose_Click(object sender, EventArgs e) { PopupHelper.HidePopup(this); } private async void btnEphCalc_Click(object sender, EventArgs e) { dxErrorProvider.ClearErrors(); if (txtCapTime.DateTime == DateTime.MinValue) { dxErrorProvider.SetError(txtCapTime, "信号时间不能为空!"); return; } var sigTime = txtCapTime.DateTime; try { var mainCode = ucEphXYZMain.GetSatCode(); var adja1Code = ucEphXYZAdja1.GetSatCode(); var adja2Code = ucEphXYZAdja2.GetSatCode(); var mainxlInfo = await XlRepository.GetLatestAsync(mainCode, sigTime); if (mainxlInfo == null) { DxHelper.MsgBoxHelper.ShowWarning($"卫星:{mainCode}未找到对应的星历信息,请导入星历"); return; } var XlCalcDto = new XlCalcDto() { tleStr = mainxlInfo.TwoLine, SigTime = sigTime }; var maineph = await HttpHelper.PostRequestAsync(SysConfig.GetUrl("Xl/Calc"), XlCalcDto); ucEphXYZMain.SetParam("主星", mainCode, (maineph.data.X, maineph.data.Y, maineph.data.Z, maineph.data.VX, maineph.data.VY, maineph.data.VZ), Color.Red); var adja1xlInfo = await XlRepository.GetLatestAsync(adja1Code, sigTime); if (adja1xlInfo == null) { DxHelper.MsgBoxHelper.ShowWarning($"卫星:{adja1Code}未找到对应的星历信息,请导入星历"); return; } XlCalcDto = new XlCalcDto() { tleStr = adja1xlInfo.TwoLine, SigTime = sigTime }; var adja1eph = await HttpHelper.PostRequestAsync(SysConfig.GetUrl("Xl/Calc"), XlCalcDto); ucEphXYZAdja1.SetParam("邻星1", adja1Code, (adja1eph.data.X, adja1eph.data.Y, adja1eph.data.Z, adja1eph.data.VX, adja1eph.data.VY, adja1eph.data.VZ), Color.Red); var adja2xlInfo = await XlRepository.GetLatestAsync(adja2Code, sigTime); if (adja2xlInfo == null) { DxHelper.MsgBoxHelper.ShowWarning($"卫星:{adja2Code}未找到对应的星历信息,请导入星历"); return; } XlCalcDto = new XlCalcDto() { tleStr = adja2xlInfo.TwoLine, SigTime = sigTime }; var adja2eph = await HttpHelper.PostRequestAsync(SysConfig.GetUrl("Xl/Calc"), XlCalcDto); ucEphXYZAdja2.SetParam("邻星2", adja2Code, (adja2eph.data.X, adja2eph.data.Y, adja2eph.data.Z, adja2eph.data.VX, adja2eph.data.VY, adja2eph.data.VZ), Color.Red); } catch (Exception ex) { Serilog.Log.Error(ex, $"手动推算{PosResType.GetEnumDisplayName()}星历失败,SigTime={sigTime}"); DxHelper.MsgBoxHelper.ShowError($"手动推算{PosResType.GetEnumDisplayName()}星历失败,{ex.Message}"); } } private void btnErrEllipse_Click(object sender, EventArgs e) { } } public class LeoX1GDOP接口 { /// /// 主星星历x y z vx vy vz /// public double[] EphMain { get; set; } /// /// 邻星1星历x y z vx vy vz /// public double[] EphAdja1 { get; set; } /// /// 邻星2星历x y z vx vy vz /// public double[] EphAdja2 { get; set; } /// /// 采集时刻 /// public DateTime CapTime { get; set; } /// /// 频差误差(Hz) /// public double DfoErr { get; set; } /// /// 星历位置误差(单位米) /// public double SatLocErr { get; set; } = 10000; /// ///星历速度误差 /// public double EphVelErr { get; set; } /// /// 上行频点1(Hz) /// public double fu1 { get; set; } } }