瀏覽代碼

修改地图点上鼠标右键

wyq 1 年之前
父節點
當前提交
fd5db0da10

+ 64 - 46
XdDw.App/UserControl/CtrlPosXd.cs

@@ -89,28 +89,28 @@ namespace XdDw.App.UserControl
                     .AddMenu("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), XdPos)
                     .AddMenu("绘制时差线", SvgHelper.LoadFromFile("Image\\DrawLine.svg"), DrawDtoLine)
                     .AddMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), LoadSimulationData)
-                     .AddMenu("GDOP分析", SvgHelper.LoadFromFile("Image\\GDOP.svg"), () =>
-                     {
-                         var ids = gridView1.GetSelectedRows();
-                         if (ids.Length <= 0)
-                         {
-                             XtraMessageBox.Show("请选择需要GDOP分析的数据信息!");
-                             return;
-                         }
-                         var item = gridView1.GetRow(ids[0]) as XDPosRes;
-                         if (x2D1GdopParam == null)
-                         {
-                             x2D1GdopParam = new X2D1GDOPParam(item.SigTime);
-                         }
-                         x2D1GdopParam.mapControl1 = mapControl1;
-                         PopupHelper.ShowPopup(x2D1GdopParam, mapControl1, mapControl1.Width / 4);
-                     })
+                    .AddMenu("GDOP分析", SvgHelper.LoadFromFile("Image\\GDOP.svg"), () =>
+                    {
+                        var ids = gridView1.GetSelectedRows();
+                        if (ids.Length <= 0)
+                        {
+                            XtraMessageBox.Show("请选择需要GDOP分析的数据信息!");
+                            return;
+                        }
+                        var item = gridView1.GetRow(ids[0]) as XDPosRes;
+                        if (x2D1GdopParam == null)
+                        {
+                            x2D1GdopParam = new X2D1GDOPParam(item.SigTime);
+                        }
+                        x2D1GdopParam.mapControl1 = mapControl1;
+                        PopupHelper.ShowPopup(x2D1GdopParam, mapControl1, mapControl1.Width / 4);
+                    })
                     .AddMenu("绘制误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), () =>
                     {
                         var ids = gridView1.GetSelectedRows();
                         if (ids.Length <= 0)
                         {
-                            XtraMessageBox.Show("请选择需要绘制误差椭圆的数据信息!");
+                            XtraMessageBox.Show("请选择需要手动绘制误差椭圆的数据信息!");
                             return;
                         }
                         var item = gridView1.GetRow(ids[0]) as XDPosRes;
@@ -121,7 +121,7 @@ namespace XdDw.App.UserControl
                             var model = ctrl.Model;
                             double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                             double[] adja_sat = Tle2XYZ.GetXyz(model.TleAdja, model.CapTime);
-                            DrawErrorEllipse2X1D(main_sat, adja_sat, new double[] { model.StationLon, model.StationLat, 0 }, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.SatLocErr);
+                            DrawErrorEllipse2X1D(item.PosLon, item.PosLat, main_sat, adja_sat, new double[] { model.StationLon, model.StationLat, 0 }, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.SatLocErr);
                         });
                     })
                     .AddMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), () => stoped = true);
@@ -150,6 +150,10 @@ namespace XdDw.App.UserControl
                 //RectMenu为框选的区域上右键菜单
                 mapControl1.AddMapMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), (lon, lat) => LoadSimulationData())
                     .AddMapMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), (lon, lat) => stoped = true)
+                     .AddPosMenu<XDPosRes>("绘制时差线", SvgHelper.LoadFromFile("Image\\DrawLine.svg"), item =>
+                     {
+                         DrawDtoLine(item);
+                     })
                     .AddPosMenu<XDPosRes>("GDOP分析", SvgHelper.LoadFromFile("Image\\GDOP.svg"), item =>
                     {
                         if (x2D1GdopParam == null)
@@ -159,7 +163,6 @@ namespace XdDw.App.UserControl
                         x2D1GdopParam.mapControl1 = mapControl1;
                         PopupHelper.ShowPopup(x2D1GdopParam, mapControl1, mapControl1.Width / 4);
                     })
-
                     .AddPosMenu<XDPosRes>("误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), item =>
                     {
                         var ctrl = new X2D1ErrEllipseParam(item.SigTime);
@@ -169,7 +172,7 @@ namespace XdDw.App.UserControl
                             var model = ctrl.Model;
                             double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                             double[] adja_sat = Tle2XYZ.GetXyz(model.TleAdja, model.CapTime);
-                            DrawErrorEllipse2X1D(main_sat, adja_sat, new double[] { model.StationLon, model.StationLat, 0 }, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.SatLocErr);
+                            DrawErrorEllipse2X1D(item.PosLon, item.PosLat, main_sat, adja_sat, new double[] { model.StationLon, model.StationLat, 0 }, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.SatLocErr);
                         });
                     })
                     .AddRectMenu<XDPosRes>("时差初值预估", SvgHelper.LoadFromFile("Image\\初值预估.svg"), items =>
@@ -181,8 +184,12 @@ namespace XdDw.App.UserControl
                         }
                         dtxdctrl.rect = rect;
                         PopupHelper.ShowPopup(dtxdctrl, mapControl1, mapControl1.Width / 4);
-                    });
+                    })
+                   .AddPosMenu<XDPosRes>("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), item =>
+                   {
+                       XdPos(item);
 
+                   });
 
                 //查询已有的定位记录
                 using (RHDWContext db = new RHDWContext())
@@ -309,16 +316,24 @@ namespace XdDw.App.UserControl
         }
         private async void XdPos()
         {
-            try
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要手动定位的数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as XDPosRes;
+            await Task.Run(() =>
             {
+                XdPos(item);
+            });
+        }
 
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要手动定位的数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XDPosRes;
+        private async void XdPos(XDPosRes item)
+        {
+            try
+            {
                 List<TxInfo> listTx = new List<TxInfo>();
                 CgRes cg;
                 using (RHDWContext db = new RHDWContext())
@@ -352,16 +367,25 @@ namespace XdDw.App.UserControl
 
         private async void DrawDtoLine()
         {
-            try
+
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
             {
+                XtraMessageBox.Show("请选择需要绘制时差线的定位数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as XDPosRes;
+            await Task.Run(() =>
+            {
+                DrawDtoLine(item);
+            });
 
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制时差线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XDPosRes;
+        }
+        private async void DrawDtoLine(XDPosRes item)
+        {
+            try
+            {
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<XzXdDw.App.Model.SatInfo> listSat = new List<XzXdDw.App.Model.SatInfo>();
                 CgRes cg;
@@ -415,17 +439,11 @@ namespace XdDw.App.UserControl
             }
         }
 
-        private void DrawErrorEllipse2X1D(double[] MsEph, double[] NsEph, double[] CDBAnt, double[] RefGeod, double DtoErr, double EphErr)
+        private void DrawErrorEllipse2X1D(double posLon, double posLat, double[] MsEph, double[] NsEph, double[] CDBAnt, double[] RefGeod, double DtoErr, double EphErr)
         {
             try
             {
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制误差椭圆线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XDPosRes;
+
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<XzXdDw.App.Model.SatInfo> listSat = new List<XzXdDw.App.Model.SatInfo>();
                 using (RHDWContext db = new RHDWContext())
@@ -440,7 +458,7 @@ namespace XdDw.App.UserControl
                 Option.NsEph = NsEph;
                 Option.CDBAnt = CDBAnt;
                 Option.RefGeod = RefGeod;
-                Option.SelectPoint = new double[3] { item.PosLon, item.PosLat, 0 };
+                Option.SelectPoint = new double[3] { posLon, posLat, 0 };
                 Option.DtoErr = DtoErr * 1e-6;
                 Option.EphErr = EphErr;
                 var points = XdDw.App.Api.低轨GDOP误差椭圆.ErrEllipseHelper.ErrorEllipse2X1D(Option);

+ 48 - 30
XzDw.App/UserControl/CtrlPosSingle.cs

@@ -129,7 +129,7 @@ namespace XzXdDw.App.UserControl
                             double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                             double[] adja1_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime1);
                             double[] adja2_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime2);
-                            DrawErrorEllipse1X(main_sat, adja1_sat, adja2_sat, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu);
+                            DrawErrorEllipse1X(item.PosLon,item.PosLat,main_sat, adja1_sat, adja2_sat, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu);
                         });
                     })
                     .AddMenu("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), SinglePos)
@@ -159,6 +159,10 @@ namespace XzXdDw.App.UserControl
                 //RectMenu为框选的区域上右键菜单
                 mapControl1.AddMapMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), (lon, lat) => LoadSimulationData())
                     .AddMapMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), (lon, lat) => stoped = true)
+                     .AddPosMenu<PosRes>("绘制频差线", SvgHelper.LoadFromFile("Image\\DfoLine.svg"), item =>
+                     {
+                         DrawDfoLine(item);
+                     })
                     .AddPosMenu<PosRes>("GDOP分析", SvgHelper.LoadFromFile("Image\\GDOP.svg"), item =>
                     {
                         if (dxGdopParam == null)
@@ -168,7 +172,6 @@ namespace XzXdDw.App.UserControl
                         dxGdopParam.mapControl1 = mapControl1;
                         PopupHelper.ShowPopup(dxGdopParam, mapControl1, mapControl1.Width / 4);
                     })
-
                     .AddPosMenu<PosRes>("误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), item =>
                     {
                         var ctrl = new DXErrEllipseParam(MBfu, item.SigTime);
@@ -179,9 +182,14 @@ namespace XzXdDw.App.UserControl
                             double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                             double[] adja1_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime1);
                             double[] adja2_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime2);
-                            DrawErrorEllipse1X(main_sat, adja1_sat, adja2_sat, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu);
+                            DrawErrorEllipse1X(item.PosLon,item.PosLat,main_sat, adja1_sat, adja2_sat, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu);
                         });
-                    });
+                    })
+                     .AddPosMenu<PosRes>("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), item =>
+                     {
+                         SinglePos(item);
+
+                     });
 
                 //查询已有的定位记录
                 using (RHDWContext db = new RHDWContext())
@@ -341,17 +349,10 @@ namespace XzXdDw.App.UserControl
             tcpServer.SendData(setings.ServerIp, setings.Port, json);
         }
 
-        private void DrawErrorEllipse1X(double[] MsEph, double[] NsEph1, double[] NsEph2, double DfoErr, double EphPosErr, double EphVelErr, double fu)
+        private void DrawErrorEllipse1X(double posLon,double posLat,double[] MsEph, double[] NsEph1, double[] NsEph2, double DfoErr, double EphPosErr, double EphVelErr, double fu)
         {
             try
             {
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制误差椭圆线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as PosRes;
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<Model.SatInfo> listSat = new List<Model.SatInfo>();
                 using (RHDWContext db = new RHDWContext())
@@ -365,7 +366,7 @@ namespace XzXdDw.App.UserControl
                 Option.MsEph = MsEph;
                 Option.NsEph1 = NsEph1;
                 Option.NsEph2 = NsEph2;
-                Option.SelectPoint = new double[3] { item.PosLon, item.PosLat, 0 };
+                Option.SelectPoint = new double[3] { posLon, posLat, 0 };
                 Option.DfoErr = DfoErr;
                 Option.EphPosErr = EphPosErr;
                 Option.EphVelErr = EphVelErr;
@@ -383,16 +384,23 @@ namespace XzXdDw.App.UserControl
 
         private async void DrawDfoLine()
         {
-            try
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要绘制频差线的定位数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as PosRes;
+            await Task.Run(() =>
             {
+                DrawDfoLine(item);
+            });
+        }
 
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制频差线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as PosRes;
+        private async void DrawDfoLine(PosRes item)
+        {
+            try
+            {
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<Model.SatInfo> listSat = new List<Model.SatInfo>();
                 CgRes cg;
@@ -412,7 +420,7 @@ namespace XzXdDw.App.UserControl
                 }
 
                 var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
-             
+
                 double[] main_eph = new double[6] { cg.MainX, cg.MainY, cg.MainZ, cg.MainVX, cg.MainVY, cg.MainVZ };
                 double[] main_eph1 = new double[6] { cg.AdjaX, cg.AdjaY, cg.AdjaZ, cg.AdjaVX, cg.AdjaVY, cg.AdjaVZ };
                 double[] main_eph2 = new double[6] { cg1.AdjaX, cg1.AdjaY, cg1.AdjaZ, cg1.AdjaVX, cg1.AdjaVY, cg1.AdjaVZ };
@@ -433,17 +441,27 @@ namespace XzXdDw.App.UserControl
         }
         private async void SinglePos()
         {
-            try
+
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要手动定位的数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as PosRes;
+            await Task.Run(() =>
             {
+                SinglePos(item);
+            });
 
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要手动定位的数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as PosRes;
 
+        }
+
+        private async void SinglePos(PosRes item)
+        {
+            try
+            {
                 CgRes cg;
                 CgRes cg1;
                 using (RHDWContext db = new RHDWContext())

+ 70 - 39
XzDw.App/UserControl/CtrlPosXz.cs

@@ -45,7 +45,7 @@ namespace XzXdDw.App.UserControl
         /// 时差初值 范围计算
         /// </summary>
         DtSXLParam dtsxlctrl = null;
-        XZGDOPParam xzGdopParam=null;
+        XZGDOPParam xzGdopParam = null;
         double MBfu;
         double CKfu;
         private TxInfo refTx;
@@ -141,7 +141,7 @@ namespace XzXdDw.App.UserControl
                              var model = ctrl.Model;
                              double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                              double[] adja_sat = Tle2XYZ.GetXyz(model.TleAdja, model.CapTime);
-                             DrawErrorEllipseDTFO(main_sat, adja_sat, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu1, model.fu2);
+                             DrawErrorEllipseDTFO(item.PosLon, item.PosLat, main_sat, adja_sat, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu1, model.fu2);
                          });
                      })
                     .AddMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), () => stoped = true);
@@ -181,16 +181,26 @@ namespace XzXdDw.App.UserControl
                     })
                     .AddPosMenu<XZPosRes>("误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), item =>
                     {
-                        var ctrl = new XZErrEllipseParam(refTx,item.SigTime, MBfu, CKfu);
+                        var ctrl = new XZErrEllipseParam(refTx, item.SigTime, MBfu, CKfu);
                         PopupHelper.ShowPopup(ctrl, mapControl1, mapControl1.Width / 4, onHide: hideReason =>
                         {
                             if (hideReason == HideReason.Defalut) return;
                             var model = ctrl.Model;
                             double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                             double[] adja_sat = Tle2XYZ.GetXyz(model.TleAdja, model.CapTime);
-                            DrawErrorEllipseDTFO(main_sat, adja_sat, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu1, model.fu2);
+                            DrawErrorEllipseDTFO(item.PosLon, item.PosLat, main_sat, adja_sat, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu1, model.fu2);
                         });
                     })
+
+                     .AddPosMenu<XZPosRes>("绘制时差线", SvgHelper.LoadFromFile("Image\\DrawLine.svg"), item =>
+                     {
+                         DrawDtoLine(item);
+                     })
+                      .AddPosMenu<XZPosRes>("绘制频差线", SvgHelper.LoadFromFile("Image\\DfoLine.svg"), item =>
+                      {
+                          DrawDfoLine(item);
+                      })
+                     
                     .AddRectMenu<XZPosRes>("时差初值预估", SvgHelper.LoadFromFile("Image\\初值预估.svg"), items =>
                     {
                         var rect = mapControl1.GetCurrentRect();
@@ -200,6 +210,11 @@ namespace XzXdDw.App.UserControl
                         }
                         dtsxlctrl.rect = rect;
                         PopupHelper.ShowPopup(dtsxlctrl, mapControl1, mapControl1.Width / 4);
+                    })
+                    .AddPosMenu<XZPosRes>("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), item =>
+                    {
+                        X2Pos(item);
+
                     });
 
 
@@ -231,7 +246,7 @@ namespace XzXdDw.App.UserControl
         bool stoped = false;
         private async void LoadSimulationData()
         {
-           
+
             SimulationEditor editor = new SimulationEditor("Simulation_Data_SX20240115.dat");
             if (editor.ShowDialog() != DialogResult.OK)
             {
@@ -251,10 +266,10 @@ namespace XzXdDw.App.UserControl
                 foreach (var item in lines)
                 {
                     if (stoped) break;
-                    var items = item.Split(new string[] { " ","\"" }, StringSplitOptions.RemoveEmptyEntries);
+                    var items = item.Split(new string[] { " ", "\"" }, StringSplitOptions.RemoveEmptyEntries);
                     if (items.Length != 18) continue;
                     int index = 0;
-                    string sigtimeStr = items[index++] +" "+items[index++];
+                    string sigtimeStr = items[index++] + " " + items[index++];
                     var SigTime = DateTime.ParseExact(sigtimeStr, "yyyy-MM-dd HH:mm:ss", null);
                     var target_dto = Convert.ToDouble(items[index++]);
                     var target_dfo = Convert.ToDouble(items[index++]);
@@ -342,17 +357,25 @@ namespace XzXdDw.App.UserControl
             tcpServer.SendData(setings.ServerIp, setings.Port, json);
         }
         private async void X2Pos()
+        {
+
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要手动定位的数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as XZPosRes;
+            await Task.Run(() =>
+            {
+                X2Pos(item);
+            });
+        }
+        private async void X2Pos(XZPosRes item)
         {
             try
             {
-
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要手动定位的数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XZPosRes;
                 List<TxInfo> listTx = new List<TxInfo>();
                 CgRes cg;
                 using (RHDWContext db = new RHDWContext())
@@ -388,16 +411,26 @@ namespace XzXdDw.App.UserControl
             }
         }
         private async void DrawDtoLine()
+        {
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要绘制时差线的定位数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as XZPosRes;
+            await Task.Run(() =>
+            {
+                DrawDtoLine(item);
+            });
+        }
+
+        private async void DrawDtoLine(XZPosRes item)
         {
             try
             {
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制时差线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XZPosRes;
+
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<Model.SatInfo> listSat = new List<Model.SatInfo>();
                 CgRes cg;
@@ -436,16 +469,21 @@ namespace XzXdDw.App.UserControl
             }
         }
         private async void DrawDfoLine()
+        {
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要绘制频差线的定位数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as XZPosRes;
+            await Task.Run(() => { DrawDfoLine(item); });
+        }
+        private async void DrawDfoLine(XZPosRes item)
         {
             try
             {
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制频差线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XZPosRes;
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<Model.SatInfo> listSat = new List<Model.SatInfo>();
                 CgRes cg;
@@ -484,22 +522,15 @@ namespace XzXdDw.App.UserControl
             }
         }
 
-        private void DrawErrorEllipseDTFO(double[] main_sat, double[] neigh_sat, double[] Ref_Station_LLH, double DtoErr, double DfoErr, double EphPosErr, double EphVelErr, double fu1, double fu2)
+        private void DrawErrorEllipseDTFO(double posLon, double posLat, double[] main_sat, double[] neigh_sat, double[] Ref_Station_LLH, double DtoErr, double DfoErr, double EphPosErr, double EphVelErr, double fu1, double fu2)
         {
             try
             {
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制误差椭圆线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XZPosRes;
                 ErrorEllipseDTFOTSOption twoStartOption = new ErrorEllipseDTFOTSOption();
                 twoStartOption.MsEph = main_sat;
                 twoStartOption.NsEph = neigh_sat;
                 twoStartOption.RefGeod = Ref_Station_LLH;
-                twoStartOption.SelectPoint = new double[3] { item.PosLon, item.PosLat, 0 };
+                twoStartOption.SelectPoint = new double[3] { posLon, posLat, 0 };
                 twoStartOption.DtoErr = DtoErr * 1e-6;
                 twoStartOption.DfoErr = DfoErr;
                 twoStartOption.EphPosErr = EphPosErr;
@@ -518,6 +549,6 @@ namespace XzXdDw.App.UserControl
                 XtraMessageBox.Show($"绘制误差椭圆线失败,失败信息:{ex.Message}");
             }
         }
-       
+
     }
 }

+ 48 - 30
XzXdDw.App/UserControl/CtrlPosSingle.cs

@@ -129,7 +129,7 @@ namespace XzXdDw.App.UserControl
                             double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                             double[] adja1_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime1);
                             double[] adja2_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime2);
-                            DrawErrorEllipse1X(main_sat, adja1_sat, adja2_sat, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu);
+                            DrawErrorEllipse1X(item.PosLon,item.PosLat,main_sat, adja1_sat, adja2_sat, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu);
                         });
                     })
                     .AddMenu("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), SinglePos)
@@ -159,6 +159,10 @@ namespace XzXdDw.App.UserControl
                 //RectMenu为框选的区域上右键菜单
                 mapControl1.AddMapMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), (lon, lat) => LoadSimulationData())
                     .AddMapMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), (lon, lat) => stoped = true)
+                     .AddPosMenu<PosRes>("绘制频差线", SvgHelper.LoadFromFile("Image\\DfoLine.svg"), item =>
+                     {
+                         DrawDfoLine(item);
+                     })
                     .AddPosMenu<PosRes>("GDOP分析", SvgHelper.LoadFromFile("Image\\GDOP.svg"), item =>
                     {
                         if (dxGdopParam == null)
@@ -168,7 +172,6 @@ namespace XzXdDw.App.UserControl
                         dxGdopParam.mapControl1 = mapControl1;
                         PopupHelper.ShowPopup(dxGdopParam, mapControl1, mapControl1.Width / 4);
                     })
-
                     .AddPosMenu<PosRes>("误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), item =>
                     {
                         var ctrl = new DXErrEllipseParam(MBfu, item.SigTime);
@@ -179,9 +182,14 @@ namespace XzXdDw.App.UserControl
                             double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                             double[] adja1_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime1);
                             double[] adja2_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime2);
-                            DrawErrorEllipse1X(main_sat, adja1_sat, adja2_sat, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu);
+                            DrawErrorEllipse1X(item.PosLon,item.PosLat,main_sat, adja1_sat, adja2_sat, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu);
                         });
-                    });
+                    })
+                     .AddPosMenu<PosRes>("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), item =>
+                     {
+                         SinglePos(item);
+
+                     });
 
                 //查询已有的定位记录
                 using (RHDWContext db = new RHDWContext())
@@ -341,17 +349,10 @@ namespace XzXdDw.App.UserControl
             tcpServer.SendData(setings.ServerIp, setings.Port, json);
         }
 
-        private void DrawErrorEllipse1X(double[] MsEph, double[] NsEph1, double[] NsEph2, double DfoErr, double EphPosErr, double EphVelErr, double fu)
+        private void DrawErrorEllipse1X(double posLon,double posLat,double[] MsEph, double[] NsEph1, double[] NsEph2, double DfoErr, double EphPosErr, double EphVelErr, double fu)
         {
             try
             {
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制误差椭圆线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as PosRes;
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<Model.SatInfo> listSat = new List<Model.SatInfo>();
                 using (RHDWContext db = new RHDWContext())
@@ -365,7 +366,7 @@ namespace XzXdDw.App.UserControl
                 Option.MsEph = MsEph;
                 Option.NsEph1 = NsEph1;
                 Option.NsEph2 = NsEph2;
-                Option.SelectPoint = new double[3] { item.PosLon, item.PosLat, 0 };
+                Option.SelectPoint = new double[3] { posLon, posLat, 0 };
                 Option.DfoErr = DfoErr;
                 Option.EphPosErr = EphPosErr;
                 Option.EphVelErr = EphVelErr;
@@ -383,16 +384,23 @@ namespace XzXdDw.App.UserControl
 
         private async void DrawDfoLine()
         {
-            try
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要绘制频差线的定位数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as PosRes;
+            await Task.Run(() =>
             {
+                DrawDfoLine(item);
+            });
+        }
 
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制频差线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as PosRes;
+        private async void DrawDfoLine(PosRes item)
+        {
+            try
+            {
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<Model.SatInfo> listSat = new List<Model.SatInfo>();
                 CgRes cg;
@@ -412,7 +420,7 @@ namespace XzXdDw.App.UserControl
                 }
 
                 var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
-             
+
                 double[] main_eph = new double[6] { cg.MainX, cg.MainY, cg.MainZ, cg.MainVX, cg.MainVY, cg.MainVZ };
                 double[] main_eph1 = new double[6] { cg.AdjaX, cg.AdjaY, cg.AdjaZ, cg.AdjaVX, cg.AdjaVY, cg.AdjaVZ };
                 double[] main_eph2 = new double[6] { cg1.AdjaX, cg1.AdjaY, cg1.AdjaZ, cg1.AdjaVX, cg1.AdjaVY, cg1.AdjaVZ };
@@ -433,17 +441,27 @@ namespace XzXdDw.App.UserControl
         }
         private async void SinglePos()
         {
-            try
+
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要手动定位的数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as PosRes;
+            await Task.Run(() =>
             {
+                SinglePos(item);
+            });
 
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要手动定位的数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as PosRes;
 
+        }
+
+        private async void SinglePos(PosRes item)
+        {
+            try
+            {
                 CgRes cg;
                 CgRes cg1;
                 using (RHDWContext db = new RHDWContext())

+ 47 - 29
XzXdDw.App/UserControl/CtrlPosXd.cs

@@ -122,7 +122,7 @@ namespace XzXdDw.App.UserControl
                             var model = ctrl.Model;
                             double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                             double[] adja_sat = Tle2XYZ.GetXyz(model.TleAdja, model.CapTime);
-                            DrawErrorEllipse2X1D(main_sat, adja_sat, new double[] { model.StationLon, model.StationLat, 0 }, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.SatLocErr);
+                            DrawErrorEllipse2X1D(item.PosLon, item.PosLat, main_sat, adja_sat, new double[] { model.StationLon, model.StationLat, 0 }, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.SatLocErr);
                         });
                     })
                     .AddMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), () => stoped = true);
@@ -151,6 +151,10 @@ namespace XzXdDw.App.UserControl
                 //RectMenu为框选的区域上右键菜单
                 mapControl1.AddMapMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), (lon, lat) => LoadSimulationData())
                     .AddMapMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), (lon, lat) => stoped = true)
+                     .AddPosMenu<XDPosRes>("绘制时差线", SvgHelper.LoadFromFile("Image\\DrawLine.svg"), item =>
+                     {
+                         DrawDtoLine(item);
+                     })
                     .AddPosMenu<XDPosRes>("GDOP分析", SvgHelper.LoadFromFile("Image\\GDOP.svg"), item =>
                     {
                         if (x2D1GdopParam == null)
@@ -160,7 +164,6 @@ namespace XzXdDw.App.UserControl
                         x2D1GdopParam.mapControl1 = mapControl1;
                         PopupHelper.ShowPopup(x2D1GdopParam, mapControl1, mapControl1.Width / 4);
                     })
-
                     .AddPosMenu<XDPosRes>("误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), item =>
                     {
                         var ctrl = new X2D1ErrEllipseParam(item.SigTime);
@@ -170,7 +173,7 @@ namespace XzXdDw.App.UserControl
                             var model = ctrl.Model;
                             double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                             double[] adja_sat = Tle2XYZ.GetXyz(model.TleAdja, model.CapTime);
-                            DrawErrorEllipse2X1D(main_sat, adja_sat, new double[] { model.StationLon, model.StationLat, 0 }, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.SatLocErr);
+                            DrawErrorEllipse2X1D(item.PosLon, item.PosLat, main_sat, adja_sat, new double[] { model.StationLon, model.StationLat, 0 }, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.SatLocErr);
                         });
                     })
                     .AddRectMenu<XDPosRes>("时差初值预估", SvgHelper.LoadFromFile("Image\\初值预估.svg"), items =>
@@ -182,8 +185,12 @@ namespace XzXdDw.App.UserControl
                         }
                         dtxdctrl.rect = rect;
                         PopupHelper.ShowPopup(dtxdctrl, mapControl1, mapControl1.Width / 4);
-                    });
+                    })
+                   .AddPosMenu<XDPosRes>("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), item =>
+                    {
+                        XdPos(item);
 
+                    });
 
                 //查询已有的定位记录
                 using (RHDWContext db = new RHDWContext())
@@ -310,16 +317,24 @@ namespace XzXdDw.App.UserControl
         }
         private async void XdPos()
         {
-            try
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
             {
+                XtraMessageBox.Show("请选择需要手动定位的数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as XDPosRes;
+            await Task.Run(() =>
+            {
+                XdPos(item);
+            });
+        }
 
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要手动定位的数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XDPosRes;
+        private async void XdPos(XDPosRes item)
+        {
+            try
+            {
                 List<TxInfo> listTx = new List<TxInfo>();
                 CgRes cg;
                 using (RHDWContext db = new RHDWContext())
@@ -353,16 +368,25 @@ namespace XzXdDw.App.UserControl
 
         private async void DrawDtoLine()
         {
-            try
+
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要绘制时差线的定位数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as XDPosRes;
+            await Task.Run(() =>
             {
+                DrawDtoLine(item);
+            });
 
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制时差线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XDPosRes;
+        }
+        private async void DrawDtoLine(XDPosRes item)
+        {
+            try
+            {
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<XzXdDw.App.Model.SatInfo> listSat = new List<XzXdDw.App.Model.SatInfo>();
                 CgRes cg;
@@ -416,17 +440,11 @@ namespace XzXdDw.App.UserControl
             }
         }
 
-        private void DrawErrorEllipse2X1D(double[] MsEph, double[] NsEph, double[] CDBAnt, double[] RefGeod, double DtoErr, double EphErr)
+        private void DrawErrorEllipse2X1D(double posLon, double posLat, double[] MsEph, double[] NsEph, double[] CDBAnt, double[] RefGeod, double DtoErr, double EphErr)
         {
             try
             {
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制误差椭圆线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XDPosRes;
+               
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<XzXdDw.App.Model.SatInfo> listSat = new List<XzXdDw.App.Model.SatInfo>();
                 using (RHDWContext db = new RHDWContext())
@@ -441,7 +459,7 @@ namespace XzXdDw.App.UserControl
                 Option.NsEph = NsEph;
                 Option.CDBAnt = CDBAnt;
                 Option.RefGeod = RefGeod;
-                Option.SelectPoint = new double[3] { item.PosLon, item.PosLat, 0 };
+                Option.SelectPoint = new double[3] { posLon, posLat, 0 };
                 Option.DtoErr = DtoErr * 1e-6;
                 Option.EphErr = EphErr;
                 var points = XzXdDw.App.Api.低轨GDOP误差椭圆.ErrEllipseHelper.ErrorEllipse2X1D(Option);

+ 70 - 39
XzXdDw.App/UserControl/CtrlPosXz.cs

@@ -45,7 +45,7 @@ namespace XzXdDw.App.UserControl
         /// 时差初值 范围计算
         /// </summary>
         DtSXLParam dtsxlctrl = null;
-        XZGDOPParam xzGdopParam=null;
+        XZGDOPParam xzGdopParam = null;
         double MBfu;
         double CKfu;
         private TxInfo refTx;
@@ -141,7 +141,7 @@ namespace XzXdDw.App.UserControl
                              var model = ctrl.Model;
                              double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                              double[] adja_sat = Tle2XYZ.GetXyz(model.TleAdja, model.CapTime);
-                             DrawErrorEllipseDTFO(main_sat, adja_sat, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu1, model.fu2);
+                             DrawErrorEllipseDTFO(item.PosLon, item.PosLat, main_sat, adja_sat, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu1, model.fu2);
                          });
                      })
                     .AddMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), () => stoped = true);
@@ -181,16 +181,26 @@ namespace XzXdDw.App.UserControl
                     })
                     .AddPosMenu<XZPosRes>("误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), item =>
                     {
-                        var ctrl = new XZErrEllipseParam(refTx,item.SigTime, MBfu, CKfu);
+                        var ctrl = new XZErrEllipseParam(refTx, item.SigTime, MBfu, CKfu);
                         PopupHelper.ShowPopup(ctrl, mapControl1, mapControl1.Width / 4, onHide: hideReason =>
                         {
                             if (hideReason == HideReason.Defalut) return;
                             var model = ctrl.Model;
                             double[] main_sat = Tle2XYZ.GetXyz(model.TleMain, model.CapTime);
                             double[] adja_sat = Tle2XYZ.GetXyz(model.TleAdja, model.CapTime);
-                            DrawErrorEllipseDTFO(main_sat, adja_sat, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu1, model.fu2);
+                            DrawErrorEllipseDTFO(item.PosLon, item.PosLat, main_sat, adja_sat, new double[] { model.RefLon, model.RefLat, 0 }, model.DtousErr, model.DfoErr, model.SatLocErr, model.EphVelErr, model.fu1, model.fu2);
                         });
                     })
+
+                     .AddPosMenu<XZPosRes>("绘制时差线", SvgHelper.LoadFromFile("Image\\DrawLine.svg"), item =>
+                     {
+                         DrawDtoLine(item);
+                     })
+                      .AddPosMenu<XZPosRes>("绘制频差线", SvgHelper.LoadFromFile("Image\\DfoLine.svg"), item =>
+                      {
+                          DrawDfoLine(item);
+                      })
+                     
                     .AddRectMenu<XZPosRes>("时差初值预估", SvgHelper.LoadFromFile("Image\\初值预估.svg"), items =>
                     {
                         var rect = mapControl1.GetCurrentRect();
@@ -200,6 +210,11 @@ namespace XzXdDw.App.UserControl
                         }
                         dtsxlctrl.rect = rect;
                         PopupHelper.ShowPopup(dtsxlctrl, mapControl1, mapControl1.Width / 4);
+                    })
+                    .AddPosMenu<XZPosRes>("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), item =>
+                    {
+                        X2Pos(item);
+
                     });
 
 
@@ -231,7 +246,7 @@ namespace XzXdDw.App.UserControl
         bool stoped = false;
         private async void LoadSimulationData()
         {
-           
+
             SimulationEditor editor = new SimulationEditor("Simulation_Data_SX20240115.dat");
             if (editor.ShowDialog() != DialogResult.OK)
             {
@@ -251,10 +266,10 @@ namespace XzXdDw.App.UserControl
                 foreach (var item in lines)
                 {
                     if (stoped) break;
-                    var items = item.Split(new string[] { " ","\"" }, StringSplitOptions.RemoveEmptyEntries);
+                    var items = item.Split(new string[] { " ", "\"" }, StringSplitOptions.RemoveEmptyEntries);
                     if (items.Length != 18) continue;
                     int index = 0;
-                    string sigtimeStr = items[index++] +" "+items[index++];
+                    string sigtimeStr = items[index++] + " " + items[index++];
                     var SigTime = DateTime.ParseExact(sigtimeStr, "yyyy-MM-dd HH:mm:ss", null);
                     var target_dto = Convert.ToDouble(items[index++]);
                     var target_dfo = Convert.ToDouble(items[index++]);
@@ -342,17 +357,25 @@ namespace XzXdDw.App.UserControl
             tcpServer.SendData(setings.ServerIp, setings.Port, json);
         }
         private async void X2Pos()
+        {
+
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要手动定位的数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as XZPosRes;
+            await Task.Run(() =>
+            {
+                X2Pos(item);
+            });
+        }
+        private async void X2Pos(XZPosRes item)
         {
             try
             {
-
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要手动定位的数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XZPosRes;
                 List<TxInfo> listTx = new List<TxInfo>();
                 CgRes cg;
                 using (RHDWContext db = new RHDWContext())
@@ -388,16 +411,26 @@ namespace XzXdDw.App.UserControl
             }
         }
         private async void DrawDtoLine()
+        {
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要绘制时差线的定位数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as XZPosRes;
+            await Task.Run(() =>
+            {
+                DrawDtoLine(item);
+            });
+        }
+
+        private async void DrawDtoLine(XZPosRes item)
         {
             try
             {
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制时差线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XZPosRes;
+
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<Model.SatInfo> listSat = new List<Model.SatInfo>();
                 CgRes cg;
@@ -436,16 +469,21 @@ namespace XzXdDw.App.UserControl
             }
         }
         private async void DrawDfoLine()
+        {
+
+            var ids = gridView1.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                XtraMessageBox.Show("请选择需要绘制频差线的定位数据信息!");
+                return;
+            }
+            var item = gridView1.GetRow(ids[0]) as XZPosRes;
+            await Task.Run(() => { DrawDfoLine(item); });
+        }
+        private async void DrawDfoLine(XZPosRes item)
         {
             try
             {
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制频差线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XZPosRes;
                 List<TxInfo> listTx = new List<TxInfo>();
                 List<Model.SatInfo> listSat = new List<Model.SatInfo>();
                 CgRes cg;
@@ -484,22 +522,15 @@ namespace XzXdDw.App.UserControl
             }
         }
 
-        private void DrawErrorEllipseDTFO(double[] main_sat, double[] neigh_sat, double[] Ref_Station_LLH, double DtoErr, double DfoErr, double EphPosErr, double EphVelErr, double fu1, double fu2)
+        private void DrawErrorEllipseDTFO(double posLon, double posLat, double[] main_sat, double[] neigh_sat, double[] Ref_Station_LLH, double DtoErr, double DfoErr, double EphPosErr, double EphVelErr, double fu1, double fu2)
         {
             try
             {
-                var ids = gridView1.GetSelectedRows();
-                if (ids.Length <= 0)
-                {
-                    XtraMessageBox.Show("请选择需要绘制误差椭圆线的定位数据信息!");
-                    return;
-                }
-                var item = gridView1.GetRow(ids[0]) as XZPosRes;
                 ErrorEllipseDTFOTSOption twoStartOption = new ErrorEllipseDTFOTSOption();
                 twoStartOption.MsEph = main_sat;
                 twoStartOption.NsEph = neigh_sat;
                 twoStartOption.RefGeod = Ref_Station_LLH;
-                twoStartOption.SelectPoint = new double[3] { item.PosLon, item.PosLat, 0 };
+                twoStartOption.SelectPoint = new double[3] { posLon, posLat, 0 };
                 twoStartOption.DtoErr = DtoErr * 1e-6;
                 twoStartOption.DfoErr = DfoErr;
                 twoStartOption.EphPosErr = EphPosErr;
@@ -518,6 +549,6 @@ namespace XzXdDw.App.UserControl
                 XtraMessageBox.Show($"绘制误差椭圆线失败,失败信息:{ex.Message}");
             }
         }
-       
+
     }
 }