Browse Source

添加单星界面

wyq 1 year ago
parent
commit
299a881fae

+ 6 - 6
XzXdDw.App/Api/PosApi.cs

@@ -44,13 +44,13 @@ namespace XzXdDw.App.Api
         /// <summary>
         /// 单星dw
         /// </summary>
-        /// <param name="main_sat"></param>
-        /// <param name="neigh_sat1"></param>
-        /// <param name="neigh_sat2"></param>
+        /// <param name="main_sat">第一时刻星历 长度6</param>
+        /// <param name="neigh_sat1">第二时刻星历 长度6</param>
+        /// <param name="neigh_sat2">第三时刻星历 长度6</param>
         /// <param name="Zone"></param>
-        /// <param name="target_dfo1"></param>
-        /// <param name="target_dfo2"></param>
-        /// <param name="fu"></param>
+        /// <param name="target_dfo1">频差1(Hz)</param>
+        /// <param name="target_dfo2">频差2(Hz)</param>
+        /// <param name="fu">上行频点(Hz)</param>
         /// <param name="target_llh"></param>
         [DllImport(gzdw, EntryPoint = "SingleStar_DFO_DW", CallingConvention = CallingConvention.Cdecl)]//两星一地
         public extern static void SingleStar_DFO_DW(double[] main_sat, double[] neigh_sat1, double[] neigh_sat2

+ 160 - 0
XzXdDw.App/Api/低轨GDOP误差椭圆/ErrEllipseHelper.cs

@@ -63,6 +63,94 @@ namespace XzXdDw.App.Api.低轨GDOP误差椭圆
         /// </summary>
         public double Pe { get; set; } = 0.5;
 
+    }
+
+    public class ErrorEllipseDTO2X1DOption
+    {
+        /// <summary>
+        /// 主星星历
+        /// </summary>
+        public double[] MsEph { get; set; }
+
+        /// <summary>
+        /// 邻星星历
+        /// </summary>
+        public double[] NsEph { get; set; }
+
+        /// <summary>
+        /// 超短波位置
+        /// </summary>
+        public double[] CDBAnt { get; set; }
+
+        /// <summary>
+        /// 参考站位置
+        /// </summary>
+        public double[] RefGeod { get; set; }
+
+        /// <summary>
+        /// 定位点
+        /// </summary>
+        public double[] SelectPoint { get; set; }
+
+        /// <summary>
+        /// 时差误差(Hz)
+        /// </summary>
+        public double DtoErr { get; set; }
+
+        /// <summary>
+        /// 星历误差
+        /// </summary>
+        public double EphErr { get; set; }
+        /// <summary>
+        /// 概率 默认0.5
+        /// </summary>
+        public double Pe { get; set; } = 0.5;
+
+    }
+
+    public class ErrorEllipseDTO1XOption
+    {
+        /// <summary>
+        /// 第一时刻星历
+        /// </summary>
+        public double[] MsEph { get; set; }
+
+        /// <summary>
+        ///第二时刻星历
+        /// </summary>
+        public double[] NsEph1 { get; set; }
+
+        /// <summary>
+        /// 第三时刻星历
+        /// </summary>
+        public double[] NsEph2 { get; set; }
+
+        /// <summary>
+        /// 定位点
+        /// </summary>
+        public double[] SelectPoint { get; set; }
+
+        /// <summary>
+        /// 频差误差(Hz)
+        /// </summary>
+        public double DfoErr { get; set; }
+        /// <summary>
+        /// 星历位置误差
+        /// </summary>
+        public double EphPosErr { get; set; }
+        /// <summary>
+        ///星历速度误差
+        /// </summary>
+        public double EphVelErr { get; set; }
+        /// <summary>
+        /// 上行频点(Hz)
+        /// </summary>
+        public double fu { get; set; }
+        /// <summary>
+        /// 概率 默认0.5
+        /// </summary>
+        public double Pe { get; set; } = 0.5;
+
     }
     public static class ErrEllipseHelper
     {
@@ -102,5 +190,77 @@ namespace XzXdDw.App.Api.低轨GDOP误差椭圆
             return Lines;
         }
 
+
+        public static IEnumerable<(double lon, double lat)> ErrorEllipse2X1D(ErrorEllipseDTO2X1DOption opt)
+        {
+
+            List<DtoLinePoint> list = new List<DtoLinePoint>();
+
+            int LOP_Len = 0;
+            IntPtr LOP_ValuePtr = GdopHelper.Error_Ellipse_2X1D(
+                opt.MsEph,
+                 opt.NsEph,
+                 opt.CDBAnt,
+                opt.RefGeod,
+                 opt.SelectPoint,
+                opt.DtoErr,
+                opt.EphErr,
+                opt.Pe, ref LOP_Len);
+            double[] LOP_Value = new double[LOP_Len];
+            if (LOP_Len > 0)
+            {
+                Marshal.Copy(LOP_ValuePtr, LOP_Value, 0, LOP_Value.Length);
+
+                int len = LOP_Len / 2;
+                for (int i = 0; i < len; i++)
+                {
+                    int temp = i * 2;
+                    list.Add(new DtoLinePoint()
+                    {
+                        Lon = LOP_Value[temp],
+                        Lat = LOP_Value[temp + 1]
+                    });
+                }
+            }
+            var Lines = list.Select(p => (p.Lon, p.Lat));
+            return Lines;
+        }
+
+
+        public static IEnumerable<(double lon, double lat)> ErrorEllipseSingleX(ErrorEllipseDTO1XOption opt)
+        {
+
+            List<DtoLinePoint> list = new List<DtoLinePoint>();
+
+            int LOP_Len = 0;
+            IntPtr LOP_ValuePtr = GdopHelper.Error_Ellipse_2DFO(
+                opt.MsEph,
+                 opt.NsEph1,
+                 opt.NsEph2,
+                 opt.SelectPoint,
+                opt.DfoErr,
+               opt.EphPosErr,
+               opt.EphVelErr,
+               opt.fu, opt.Pe, ref LOP_Len);
+            double[] LOP_Value = new double[LOP_Len];
+            if (LOP_Len > 0)
+            {
+                Marshal.Copy(LOP_ValuePtr, LOP_Value, 0, LOP_Value.Length);
+
+                int len = LOP_Len / 2;
+                for (int i = 0; i < len; i++)
+                {
+                    int temp = i * 2;
+                    list.Add(new DtoLinePoint()
+                    {
+                        Lon = LOP_Value[temp],
+                        Lat = LOP_Value[temp + 1]
+                    });
+                }
+            }
+            var Lines = list.Select(p => (p.Lon, p.Lat));
+            return Lines;
+        }
+
     }
 }

+ 38 - 0
XzXdDw.App/Api/低轨GDOP误差椭圆/GdopHelper.cs

@@ -43,6 +43,44 @@ namespace XzXdDw.App.Api.低轨GDOP误差椭圆
         double eph_pos_err, double eph_vel_err, double fu, double Pe, ref int LOP_Len);
 
 
+
+        /// <summary>
+        /// 两星一地误差椭圆
+        /// </summary>
+        /// <param name="main_eph">主星位置 长度6</param>
+        /// <param name="neigh_eph">邻星位置 长度6</param>
+        /// <param name="cdbAnt">超短波 长度3</param>
+        /// <param name="refStation">参考站 长度3</param>
+        /// <param name="Select_Point">定位点 长度3</param>
+        /// <param name="dto_err">时差误差(s)</param>
+        /// <param name="eph_err"></param>
+        /// <param name="Pe">0.5</param>
+        /// <param name="LOP_Len"></param>
+        /// <returns></returns>
+        [DllImport(GDOPDll, EntryPoint = "Error_Ellipse_2X1D", CallingConvention = CallingConvention.Cdecl)]
+        public extern static IntPtr Error_Ellipse_2X1D(double[] main_eph, double[] neigh_eph, double[] cdbAnt, double[] refStation, double[] Select_Point, double dto_err,
+       double eph_err, double Pe, ref int LOP_Len);
+
+
+        /// <summary>
+        /// 单星误差椭圆
+        /// </summary>
+        /// <param name="main_eph"></param>
+        /// <param name="neigh_eph1"></param>
+        /// <param name="neigh_eph2"></param>
+        /// <param name="Select_Point"></param>
+        /// <param name="dfo_err"></param>
+        /// <param name="eph_pos_err"></param>
+        /// <param name="eph_vel_err"></param>
+        /// <param name="fu"></param>
+        /// <param name="Pe"></param>
+        /// <param name="LOP_Len"></param>
+        /// <returns></returns>
+        [DllImport(GDOPDll, EntryPoint = "Error_Ellipse_2DFO", CallingConvention = CallingConvention.Cdecl)]
+        public extern static IntPtr Error_Ellipse_2DFO(double[] main_eph, double[] neigh_eph1, double[] neigh_eph2,  double[] Select_Point, double dfo_err, double eph_pos_err, double eph_vel_err, double fu, double Pe,
+            ref int LOP_Len);
+
+
         [DllImport(GDOPDll, CallingConvention = CallingConvention.Cdecl)]
         public static extern void freeBuff(IntPtr buf);
        

+ 16 - 2
XzXdDw.App/MainForm.Designer.cs

@@ -46,6 +46,7 @@
             this.barDockControlRight = new DevExpress.XtraBars.BarDockControl();
             this.dockManager1 = new DevExpress.XtraBars.Docking.DockManager(this.components);
             this.tabbedView1 = new DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView(this.components);
+            this.btnSingle = new DevExpress.XtraBars.BarButtonItem();
             ((System.ComponentModel.ISupportInitialize)(this.documentManager1)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.dockManager1)).BeginInit();
@@ -79,9 +80,10 @@
             this.btnUserCheck,
             this.btnWCPJ,
             this.btnXl,
-            this.btnSet});
+            this.btnSet,
+            this.btnSingle});
             this.barManager1.MainMenu = this.bar1;
-            this.barManager1.MaxItemId = 9;
+            this.barManager1.MaxItemId = 10;
             // 
             // bar1
             // 
@@ -95,6 +97,7 @@
             new DevExpress.XtraBars.LinkPersistInfo(this.btnUserCheck),
             new DevExpress.XtraBars.LinkPersistInfo(this.btnXzDw),
             new DevExpress.XtraBars.LinkPersistInfo(this.btnXdDw),
+            new DevExpress.XtraBars.LinkPersistInfo(this.btnSingle),
             new DevExpress.XtraBars.LinkPersistInfo(this.btnWCPJ),
             new DevExpress.XtraBars.LinkPersistInfo(this.btnXl),
             new DevExpress.XtraBars.LinkPersistInfo(this.btnSet)});
@@ -229,6 +232,16 @@
             "DevExpress.XtraBars.FluentDesignSystem.FluentDesignFormControl",
             "DevExpress.XtraBars.ToolbarForm.ToolbarFormControl"});
             // 
+            // btnSingle
+            // 
+            this.btnSingle.Caption = "单星协同定位";
+            this.btnSingle.Id = 9;
+            this.btnSingle.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnSingle.ImageOptions.SvgImage")));
+            this.btnSingle.ImageOptions.SvgImageSize = new System.Drawing.Size(30, 30);
+            this.btnSingle.Name = "btnSingle";
+            this.btnSingle.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph;
+            this.btnSingle.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btn_ItemClick);
+            // 
             // MainForm
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
@@ -269,5 +282,6 @@
         private DevExpress.XtraBars.BarButtonItem btnWCPJ;
         private DevExpress.XtraBars.BarButtonItem btnXl;
         private DevExpress.XtraBars.BarButtonItem btnSet;
+        private DevExpress.XtraBars.BarButtonItem btnSingle;
     }
 }

+ 1 - 0
XzXdDw.App/MainForm.cs

@@ -28,6 +28,7 @@ namespace XzXdDw
             ctrlTypes.Add("用户识别", typeof(CtrlUserCheck));
             ctrlTypes.Add("星座协同定位", typeof(CtrlPosXz));
             ctrlTypes.Add("星地协同定位", typeof(CtrlPosXd));
+            ctrlTypes.Add("单星协同定位", typeof(CtrlPosSingle));
             ctrlTypes.Add("误差评估", typeof(CtrlWcpj));
             ctrlTypes.Add("卫星管理", typeof(CtrlSat));
             ctrlTypes.Add("星历管理", typeof(CtrlXl));

+ 101 - 7
XzXdDw.App/MainForm.resx

@@ -126,7 +126,7 @@
   <assembly alias="DevExpress.Data.v23.1" name="DevExpress.Data.v23.1, Version=23.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
   <data name="btnCg.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjEsIFZlcnNpb249MjMuMS42
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJYIAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -170,7 +170,7 @@
   </data>
   <data name="btnUserCheck.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjEsIFZlcnNpb249MjMuMS42
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAADgDAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -191,7 +191,7 @@
   </data>
   <data name="btnXzDw.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjEsIFZlcnNpb249MjMuMS42
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJACAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -209,7 +209,7 @@
   </data>
   <data name="btnXdDw.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjEsIFZlcnNpb249MjMuMS42
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAPkDAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -229,11 +229,105 @@
         LDE3LjgsMTcuNCwxNy40eiIgY2xhc3M9IkJsdWUiIC8+DQogICAgPHBhdGggZD0iTTEyLDEybDIuNiwy
         LjZjMC40LTAuNCwwLjktMC42LDEuNC0wLjZjMS4xLDAsMiwwLjksMiwyYzAsMC42LTAuMiwxLjEtMC42
         LDEuNEwyMCwyMGw0LTEyTDEyLDEyeiIgY2xhc3M9IlJlZCIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="btnSingle.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjEsIFZlcnNpb249MjMuMS42
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAADMUAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
+        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5HcmVlbntmaWxsOiMwMzlD
+        MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQoJLnN0MntkaXNwbGF5Om5vbmU7fQoJLnN0M3tk
+        aXNwbGF5OmlubGluZTtmaWxsOiNGRkIxMTU7fQoJLnN0NHtkaXNwbGF5OmlubGluZTt9Cgkuc3Q1e2Rp
+        c3BsYXk6aW5saW5lO29wYWNpdHk6MC43NTt9Cgkuc3Q2e2Rpc3BsYXk6aW5saW5lO29wYWNpdHk6MC41
+        O30KCS5zdDd7ZGlzcGxheTppbmxpbmU7ZmlsbDojMDM5QzIzO30KCS5zdDh7ZGlzcGxheTppbmxpbmU7
+        ZmlsbDojRDExQzFDO30KCS5zdDl7ZGlzcGxheTppbmxpbmU7ZmlsbDojMTE3N0Q3O30KCS5zdDEwe2Rp
+        c3BsYXk6aW5saW5lO2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU+DQogIDxnIGlkPSJMb2NhbGl6YXRpb24i
+        Pg0KICAgIDxwYXRoIGQ9Ik0xNiwyQzguMywyLDIsOC4zLDIsMTZzNi4zLDE0LDE0LDE0czE0LTYuMywx
+        NC0xNFMyMy44LDIsMTYsMnogTTIwLjMsMTkuMWMtMC41LDAuMS0wLjUtMC4zLTAuMS0wLjQgICBDMjAu
+        MywxOC45LDIwLjQsMTguOCwyMC4zLDE5LjF6IE04LjYsMTMuM2MwLTAuMSwwLTAuMSwwLTAuMkM4LjYs
+        MTMuMiw4LjYsMTMuMyw4LjYsMTMuM3ogTTIyLjMsMjEuOWMwLTAuMS0wLjEtMC4xLTAuMS0wLjEgICBj
+        MC4xLDAuMy0wLjEsMC45LTAuMSwxLjJjLTAuMSwwLjQtMC40LDEuMy0wLjcsMS4zYzAsMC4yLTAuNCww
+        LTAuMywwLjJjLTAuNSwwLjEtMC44LDAuNS0wLjgsMC44YzAsMC4xLTAuMywxLjEtMC40LDEuMSAgIGMw
+        LTAuMSwwLjEtMC4yLDAuMS0wLjNjMCwwLjEtMC4xLDAuMS0wLjEsMGMwLDAuMi0wLjMsMC44LTAuNCww
+        LjlzLTAuMywwLjMtMC41LDAuMmMtMC4xLDAtMC4zLTAuMi0wLjMtMC40YzAsMC4zLDAuMiwwLjYsMC4y
+        LDAuOCAgIGMtMC45LDAuMi0xLjgsMC4zLTIuNywwLjNjLTAuMSwwLTAuMiwwLTAuMywwYzAuMS0wLjMs
+        MC4xLTAuNSwwLjItMC44YzAuMi0wLjcsMC4yLTEuNSwwLjMtMi4yYzAuMS0wLjQsMC4zLTEuNSwwLjEt
+        MS45ICAgYy0wLjEtMC4yLTAuMy0wLjItMC41LTAuNGMtMC42LTAuNC0wLjYtMC43LTAuOC0xLjNjLTAu
+        MS0wLjQtMC4zLTAuNS0wLjUtMC45Yy0wLjEtMC4yLTAuMi0wLjItMC4yLTAuNWMwLTAuMiwwLjItMC40
+        LDAuMi0wLjYgICBsLTAuMSwwLjFsLTAuMS0wLjFjMC0wLjEsMC0wLjQsMC4xLTAuNGMwLTAuMiwwLjEt
+        MC43LDAuMy0wLjdjMC0wLjMsMC4yLTAuMywwLjEtMC41YzAuMy0wLjIsMC0wLjksMC0xYy0wLjIsMC0w
+        LjEtMC4xLTAuMy0wLjIgICBjMCwwLjEtMC4yLDAuMS0wLjIsMC4yczAuMSwwLDAuMSwwLjFjLTAuMyww
+        LTAuNC0wLjItMC42LTAuM2MwLDAuMi0wLjEtMC4yLTAuMy0wLjNjMC4xLDAuMi0wLjItMC4yLTAuMi0w
+        LjMgICBjLTAuMS0wLjItMC4yLTAuMy0wLjItMC41Yy0wLjUsMC0wLjYtMC4xLTEtMC40Yy0wLjQtMC4z
+        LTAuNy0wLjEtMS4yLTAuM2MtMC4zLTAuMS0wLjctMC4zLTAuOS0wLjVjLTAuNC0wLjMtMC4zLTAuNi0w
+        LjUtMSAgIGMtMC4xLTAuMy0wLjctMC43LTAuNi0xYy0wLjYsMC0wLjUtMS4zLTEuMS0xLjNjMCwwLjIs
+        MC42LDEuNSwwLjgsMmMtMC4yLTAuNC0wLjgtMC42LTAuOS0xYzAuNSwwLTAuMi0wLjgtMC40LTEgICBj
+        LTAuMi0wLjMtMC4yLTAuNi0wLjctMC42YzAtMC4yLTAuMi0wLjQtMC4yLTAuN2MtMC4xLDAtMC4yLTAu
+        MS0wLjItMC4yaDAuMWMwLTAuMS0wLjEtMC4xLDAtMC4yYy0wLjEsMCwwLDAtMC4xLDBjMCwwLDAsMCww
+        LDAuMSAgIEM2LjIsOS41LDYuMSw5LjMsNiw5LjJjMS4xLTEuNiwyLjYtMyw0LjQtMy45YzAuMSwwLjEs
+        MC4xLDAuMywwLjIsMC4zYzAtMC4xLDAtMC4yLDAtMC4zYzAuNy0wLjQsMS41LTAuNywyLjQtMC45ICAg
+        YzAuMSwwLDAuMSwwLjEsMC4yLDAuMWMwLjIsMC4xLDAuNCwwLjEsMC42LDAuMkMxNCw0LjgsMTMuOSw0
+        LjgsMTQsNS4xYzAsMC4xLDAuMSwwLjIsMC4xLDAuM2MwLjEsMCwwLjEsMCwwLjIsMCAgIGMwLDAuMS0w
+        LjEsMC4xLTAuMSwwYzAsMC4zLDAuMiwwLjYsMC40LDAuMmMwLjEtMC4yLTAuMi0wLjQtMC4xLTAuN0Mx
+        NC42LDQuNywxNSw0LjUsMTUsNC4zbDAsMGMwLTAuMSwwLTAuMi0wLjEtMC4zICAgYzAuMywwLDAuNyww
+        LDEsMGMwLjcsMCwxLjMsMC4xLDIsMC4yYzAsMCwwLDAsMCwwLjFjMCwwLTAuMSwwLTAuMiwwYzAsMCww
+        LDAuMiwwLDAuMWMwLjEsMCwwLjQsMC4yLDAuMywwLjRjMC4xLDAsMC4xLDAuMSwwLjIsMC4xICAgYzAt
+        MC4yLDAuMywwLjMsMC4zLDBjLTAuMSwwLDAuMSwwLjEsMC4xLDAuMWMwLDAuMS0wLjUsMC4zLTAuNiww
+        LjNjMCwwLjMsMC44LTAuNSwwLjgsMGMwLDAsMCwwLDAuMS0wLjFjMCwwLjYtMC44LDAuOS0xLjEsMC45
+        ICAgYy0wLjIsMC0wLjYsMC0wLjgsMGMtMC4yLDAuMS0wLjQsMC42LTAuNywwLjZjMCwwLjMtMC4xLDAu
+        My0wLjIsMC40YzAsMCwxLjMtMS4zLDEuMy0wLjZjMCwwLTAuMSwwLjItMC4zLDAuM1Y2LjcgICBjLTAu
+        MSwwLjEsMCwwLjEsMCwwLjJjMC4xLDAsMC4yLTAuMSwwLjItMC4xYzAsMC4xLDAsMC4yLTAuMSwwLjJo
+        MC4xYzAsMC4xLTAuMSwwLjMsMC4xLDAuM2wwLDBjMCwwLDAsMC4xLTAuMSwwLjFsMCwwICAgYzAuMiww
+        LDAuMiwwLDAuNCwwYzAsMC4zLDAsMCwwLjEsMC4yYy0wLjEsMC0wLjQsMC4zLTAuNCwwLjNzMC0wLjEt
+        MC4xLTAuMWwtMC4yLDAuM2MwLDAsMCwwLDAtMC4xYy0wLjcsMCwwLjMtMC41LDAuMy0wLjUgICBjLTAu
+        NSwwLTAuMiwwLjEtMC4yLTAuMmgtMC4xYzAsMC4xLTAuMSwwLjItMC4yLDAuMlY3LjRjLTAuMSwwLjEt
+        MC4xLDAuMSwwLDAuMWMtMC4xLDAuMS0wLjEsMC0wLjIsMGMtMC4xLDAuMSwwLjEsMC40LTAuMiwwLjIg
+        ICBjMCwwLjEsMCwwLDAsMC4xYy0wLjEsMCwwLTAuMS0wLjEtMC4xYzAsMC4zLTAuNiwwLjItMC4zLDAu
+        N2MtMC4xLDAtMC4xLDAtMC4yLDBjMCwwLjEsMCwwLjEsMCwwLjFjLTAuMSwwLTAuMiwwLjEtMC4zLDAu
+        MiAgIGMwLjEsMCwwLjMsMCwwLjIsMGMwLDAuMS0wLjIsMC4xLTAuMywwLjFjMCwwLjItMC4xLDAuNC0w
+        LjMsMC4zYzAsMC4yLDAuMSwwLjMtMC4xLDAuNWMwLDAuMSwwLTAuNCwwLTAuNSAgIGMtMC4xLDAuMS0w
+        LjMsMC40LTAuMiwwLjRjMCwwLjIsMC4xLDAuMSwwLjEsMC4yYy0wLjIsMCwwLDAuMiwwLjEsMC4zQzE1
+        LDEwLDE1LDEwLDE1LDEwLjFjMC4xLDAsMC4yLDAuMSwwLjIsMC4xICAgYy0wLjEsMC0wLjEsMC0wLjIs
+        MGMwLDAuNS0wLjksMC43LTAuOCwxLjRjMCwwLjMsMC40LDEsMC4xLDEuMmMwLTAuMy0wLjMtMC40LTAu
+        My0wLjdjLTAuMSwwLDAsMC4xLTAuMSwwLjEgICBjLTAuMS0wLjEsMC0wLjMtMC4xLTAuNWMtMC4xLTAu
+        MS0wLjIsMC0wLjQtMC4xYy0wLjEsMC0wLjUtMC4yLTAuNS0wLjJjLTAuMSwwLTAuMywwLTAuNCwwLjFj
+        MC4xLDAuMiwwLjIsMCwwLjEsMC4yICAgYzAuMSwwLDAuMSwwLDAuMSwwLjFjLTAuMSwwLTAuMi0wLjEt
+        MC4zLTAuMmMwLDAuMSwwLDAuMSwwLDAuMWMtMC4xLDAtMC4xLDAtMC4yLDBjMC0wLjEsMC0wLjEsMC0w
+        LjFoLTAuN2MwLDAuMi0wLjQsMC41LTAuNSwwLjggICBzMCwwLjksMCwxLjNjMC4xLDAsMC4yLDAuNCww
+        LjQsMC42YzAuMiwwLjEsMC43LDAuMiwwLjksMC4xYzAuMi0wLjIsMC4yLTAuOCwwLjYtMC44YzAuNCww
+        LDAsMC41LDAuMSwwLjljLTAuMSwwLTAuMS0wLjEtMC4xLTAuMSAgIGMwLDAuMi0wLjEsMC41LTAuMSww
+        LjdjMC40LDAsMC45LTAuMiwxLjEsMC4yYzAuMSwwLjItMC4yLDAuNS0wLjEsMC44YzAsMC4yLDAuMiww
+        LjUsMC40LDAuNWMwLjIsMC4xLDAuMi0wLjEsMC4zLTAuMSAgIGMwLjIsMCwwLjIsMC4xLDAuNCwwLjFj
+        MC4xLDAsMC4xLDAuMiwwLjIsMC4yYzAuMS0wLjUsMC4zLTAuNywwLjctMC45YzAuMy0wLjEsMC4yLTAu
+        MywwLjEsMC4xYzAuMiwwLTAuMSwwLjUsMC4xLDAuNSAgIGMwLTAuMiwwLTAuNSwwLjMtMC42YzAtMC4x
+        LTAuMSwwLTAuMS0wLjFjMC4xLTAuMSwwLjUsMC4zLDAuNCwwLjNjMCwwLjEsMC45LDAuMSwwLjksMGgw
+        LjNjMCwwLjEsMCwwLTAuMSwwLjEgICBjMCwwLjEsMC4zLDAuMiwwLjMsMC4xYy0wLjEsMC4zLTAuMSww
+        LjEtMC4zLDAuNGMwLjYsMCwwLjYtMC4yLDAuNywwLjRjMC4xLDAsMCwwLDAuMSwwYzAtMC4zLDAuMy0w
+        LjEsMC4zLDAuMWMwLDAsMC41LTAuMiwwLjUsMCAgIGMwLjYsMCwwLjQsMC43LDAuNywwLjljMC4xLDAt
+        MC4xLDAsMC4xLDBMMjAsMTguNGMwLjEsMCwwLTAuMSwwLjEtMC4xYzAsMC4xLDAsMC4xLDAsMC4xczAs
+        MCwwLDAuMWwwLDBjLTAuMiwwLTAuMSwwLTAuMS0wLjEgICBjMCwwLTAuNSwwLjUtMC44LDAuN2MwLjIt
+        MC4xLDAuMy0wLjIsMC42LTAuMmMwLDAuMywwLDAuMSwwLDAuM2MwLjEsMCwwLTAuMywwLjItMC4zYzAs
+        MC40LDAuNCwwLjEsMC41LDAuMWMwLDAsMC42LTAuMywwLjUsMC4xICAgYzAuMiwwLDAuMSwwLjMsMC4z
+        LDAuM2MwLjMtMC4zLDEuMiwwLjMsMS41LDAuNUMyMy40LDIwLjcsMjIuNiwyMS4xLDIyLjMsMjEuOXog
+        TTE3LjcsNy4zbC0wLjEtMC4xYy0wLjEsMC0wLjQtMC4xLTAuMS0wLjIgICBsMC4xLDAuMkwxNy43LDcu
+        M0MxNy42LDcuMywxNy42LDcuMywxNy43LDcuM3ogTTE3LjMsNi4yYzAuMSwwLDAuNCwwLjEsMC41LDAu
+        MmMwLDAsMCwwLDAsMC4xQzE3LjcsNi41LDE3LjMsNi4zLDE3LjMsNi4yeiAgICBNMTIuNSwxMS44QzEy
+        LjQsMTEuOCwxMi40LDExLjcsMTIuNSwxMS44QzEyLjUsMTEuNywxMi41LDExLjcsMTIuNSwxMS44eiBN
+        MTkuOCwxOC45QzE5LjgsMTguOSwxOS43LDE5LDE5LjgsMTguOUwxOS44LDE4Ljl6ICAgIE0xOS43LDE5
+        QzE5LjgsMTksMTkuNywxOS4xLDE5LjcsMTlMMTkuNywxOXoiIGNsYXNzPSJCbHVlIiAvPg0KICA8L2c+
+        DQo8L3N2Zz4L
 </value>
   </data>
   <data name="btnWCPJ.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjEsIFZlcnNpb249MjMuMS42
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJgEAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -260,7 +354,7 @@
   </data>
   <data name="btnXl.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjEsIFZlcnNpb249MjMuMS42
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAPMDAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -284,7 +378,7 @@
   </data>
   <data name="btnSet.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjEsIFZlcnNpb249MjMuMS42
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAO4DAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi

+ 155 - 0
XzXdDw.App/UserControl/CtrlPosSingle.Designer.cs

@@ -0,0 +1,155 @@
+
+namespace XzXdDw.App.UserControl
+{
+    partial class CtrlPosSingle
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.gridPos = new DevExpress.XtraGrid.GridControl();
+            this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+            this.mapControl1 = new DevExpress.XtraMap.MapControl();
+            this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.splitterItem1 = new DevExpress.XtraLayout.SplitterItem();
+            ((System.ComponentModel.ISupportInitialize)(this.gridPos)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.mapControl1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
+            this.layoutControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.splitterItem1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // gridPos
+            // 
+            this.gridPos.Location = new System.Drawing.Point(12, 276);
+            this.gridPos.MainView = this.gridView1;
+            this.gridPos.Name = "gridPos";
+            this.gridPos.Size = new System.Drawing.Size(553, 125);
+            this.gridPos.TabIndex = 1;
+            this.gridPos.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+            this.gridView1});
+            // 
+            // gridView1
+            // 
+            this.gridView1.GridControl = this.gridPos;
+            this.gridView1.Name = "gridView1";
+            // 
+            // mapControl1
+            // 
+            this.mapControl1.Location = new System.Drawing.Point(12, 12);
+            this.mapControl1.Name = "mapControl1";
+            this.mapControl1.Size = new System.Drawing.Size(553, 248);
+            this.mapControl1.TabIndex = 2;
+            // 
+            // layoutControl1
+            // 
+            this.layoutControl1.Controls.Add(this.gridPos);
+            this.layoutControl1.Controls.Add(this.mapControl1);
+            this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.layoutControl1.Location = new System.Drawing.Point(0, 0);
+            this.layoutControl1.Name = "layoutControl1";
+            this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(973, 124, 650, 400);
+            this.layoutControl1.Root = this.Root;
+            this.layoutControl1.Size = new System.Drawing.Size(577, 413);
+            this.layoutControl1.TabIndex = 3;
+            this.layoutControl1.Text = "layoutControl1";
+            // 
+            // Root
+            // 
+            this.Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            this.Root.GroupBordersVisible = false;
+            this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+            this.layoutControlItem1,
+            this.layoutControlItem2,
+            this.splitterItem1});
+            this.Root.Name = "Root";
+            this.Root.Size = new System.Drawing.Size(577, 413);
+            this.Root.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            this.layoutControlItem1.Control = this.mapControl1;
+            this.layoutControlItem1.Location = new System.Drawing.Point(0, 0);
+            this.layoutControlItem1.Name = "layoutControlItem1";
+            this.layoutControlItem1.Size = new System.Drawing.Size(557, 252);
+            this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem1.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            this.layoutControlItem2.Control = this.gridPos;
+            this.layoutControlItem2.Location = new System.Drawing.Point(0, 264);
+            this.layoutControlItem2.Name = "layoutControlItem2";
+            this.layoutControlItem2.Size = new System.Drawing.Size(557, 129);
+            this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem2.TextVisible = false;
+            // 
+            // splitterItem1
+            // 
+            this.splitterItem1.AllowHotTrack = true;
+            this.splitterItem1.Location = new System.Drawing.Point(0, 252);
+            this.splitterItem1.Name = "splitterItem1";
+            this.splitterItem1.Size = new System.Drawing.Size(557, 12);
+            // 
+            // CtrlPosXd
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.layoutControl1);
+            this.Name = "CtrlPosXd";
+            this.Size = new System.Drawing.Size(577, 413);
+            this.Load += new System.EventHandler(this.CtrlXdPos_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.gridPos)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.mapControl1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
+            this.layoutControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.splitterItem1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraGrid.GridControl gridPos;
+        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+        private DevExpress.XtraMap.MapControl mapControl1;
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.SplitterItem splitterItem1;
+    }
+}

+ 317 - 0
XzXdDw.App/UserControl/CtrlPosSingle.cs

@@ -0,0 +1,317 @@
+using DevExpress.Utils.Drawing.Helpers;
+using DevExpress.Utils.Extensions;
+using DevExpress.XtraEditors;
+using DevExpress.XtraExport.Helpers;
+using DevExpress.XtraGrid.Views.Grid;
+using DevExpress.XtraMap;
+using DevExpress.XtraTreeList.Data;
+using DxHelper;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Data.Entity;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Controls;
+using System.Windows.Documents;
+using System.Windows.Forms;
+using XdCxRhDW.App.Api.时差粗值预测;
+using XdCxRhDW.App.Api.时差线;
+using XdCxRhDW.App.DTO;
+using XdCxRhDW.App.UserControl;
+using XzXdDw.App.Api;
+using XzXdDw.App.Api.星地GDOP误差椭圆;
+using XzXdDw.App.EditForms;
+using XzXdDw.App.EFContext;
+using XzXdDw.App.Model;
+
+namespace XzXdDw.App.UserControl
+{
+    /// <summary>
+    /// 星地定位
+    /// </summary>
+    public partial class CtrlPosSingle : DevExpress.XtraEditors.XtraUserControl
+    {
+        DtXDParam dtxdctrl = null;
+        public CtrlPosSingle()
+        {
+            InitializeComponent();
+        }
+
+        private async void CtrlXdPos_Load(object sender, EventArgs e)
+        {
+            try
+            {
+                gridPos.Init().UseMultiSelect().UseFilter().UseRowNumber().UseExportXlsx()
+                    .AddMenu("删除", SvgHelper.CreateClose(), async () =>
+                    {
+                        try
+                        {
+                            if (XtraMessageBox.Show("确认删除?(Ctrl+A可全选删除)", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
+                            {
+                                return;
+                            }
+                            var ids = gridView1.GetSelectedRows();
+                            List<PosRes> deletePos = new List<PosRes>();
+                            using (RHDWContext db = new RHDWContext())
+                            {
+                                foreach (var id in ids)
+                                {
+                                    var item = gridView1.GetRow(id) as PosRes;
+                                    var delItem = await db.PosRes.Where(p => p.ID == item.ID).FirstOrDefaultAsync();
+                                    if (delItem != null)
+                                    {
+                                        db.PosRes.Remove(delItem);
+                                    }
+                                    deletePos.Add(item);
+                                }
+                                await db.SaveChangesAsync();
+                            }
+                            gridView1.DeleteSelectedRows();
+                            mapControl1.DelPosItem(deletePos);
+
+                        }
+                        catch (Exception ex)
+                        {
+                            Serilog.Log.Error("删除结果失败", ex);
+                            XtraMessageBox.Show("删除结果失败");
+                        }
+                    })
+                    .AddMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), LoadTestData)
+                    .AddMenu("绘制误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), DrawErrorEllipse1X)
+                    .AddMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), () => stoped = true);
+
+
+                mapControl1.UseDefalutOptions()
+               //.UseCluster()//定位点使用内置聚合
+               .UseClearAll()
+               .UseDistanceLine()
+               .UseMarkDot()
+               //.UseExportImg()
+               //.UseExportXlsx()
+               //.UseExportCsv()
+               .UseDrawRect(rect =>
+               {
+                   if (dtxdctrl != null)
+                   {
+                       dtxdctrl.rect = rect;
+                   }
+               });
+
+
+
+                //MapMenu为地图瓦片上右键菜单
+                //AddPosMenu为定位点上右键菜单
+                //RectMenu为框选的区域上右键菜单
+                mapControl1.AddMapMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), (lon, lat) => LoadTestData())
+                    .AddMapMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), (lon, lat) => stoped = true)
+                    .AddMapMenu("GDOP分析", SvgHelper.LoadFromFile("Image\\GDOP.svg"), (lon, lat) =>
+                    {
+                        
+                    })
+                    
+                    .AddPosMenu<PosRes>("误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), item =>
+                    {
+                       
+                    })
+                    .AddRectMenu<PosRes>("时差初值预估", SvgHelper.LoadFromFile("Image\\初值预估.svg"), items =>
+                    {
+                        var rect = mapControl1.GetCurrentRect();
+                        if (dtxdctrl == null)
+                        {
+                            dtxdctrl = new DtXDParam();
+                        }
+                        dtxdctrl.rect = rect;
+                        PopupHelper.ShowPopup(dtxdctrl, mapControl1, mapControl1.Width / 4);
+                    });
+
+
+                //查询已有的定位记录
+                using (RHDWContext db = new RHDWContext())
+                {
+                    List<PosRes> list = await db.PosRes.ToListAsync();
+                    this.gridPos.DataSource = list;
+                    mapControl1.SetPosDataSource(list);
+                }
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error("查询定位结果失败", ex);
+                XtraMessageBox.Show("查询定位结果失败");
+            }
+        }
+        bool stoped = false;
+        private async void LoadTestData()
+        {
+            stoped = false;
+
+
+
+            //在列表控件中全选+右键可以删除所有测试结果
+            using (RHDWContext db = new RHDWContext())
+            {
+                var listTx = db.TxInfos.ToList();
+                var lines = File.ReadAllLines("Simulation_Data2023.dat");
+                Random r = new Random();
+                foreach (var item in lines)
+                {
+                    if (stoped) break;
+                    //var items = item.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+                    //var sxDto = Convert.ToDouble(items[0]);
+                    //var xdDto = Convert.ToDouble(items[1]);
+                    //var mainYbDto = Convert.ToDouble(items[2]);
+                    //var adjaYbDto = Convert.ToDouble(items[3]);
+                    //var mainX = Convert.ToDouble(items[7]);
+                    //var mainY = Convert.ToDouble(items[8]);
+                    //var mainZ = Convert.ToDouble(items[9]);
+                    //var adjaX = Convert.ToDouble(items[10]);
+                    //var adjaY = Convert.ToDouble(items[11]);
+                    //var adjaZ = Convert.ToDouble(items[12]);
+                    //var cgRes = new CgRes()
+                    //{
+                    //    SigTime = DateTime.Now,
+                    //    DtoSx = sxDto * 1e6,
+                    //    DfoSx = 200 + r.Next(1, 5) + Math.Round(r.NextDouble(), 3),
+                    //    SnrSx = r.Next(18, 24) + Math.Round(r.NextDouble(), 1),
+                    //    DtoCdb = xdDto * 1e6,
+                    //    DfoCdb = 600 + r.Next(1, 5) + Math.Round(r.NextDouble(), 3),
+                    //    SnrCdb = r.Next(22, 32) + Math.Round(r.NextDouble(), 1),
+                    //    YbMain = mainYbDto * 1e6,
+                    //    YbAdja = adjaYbDto * 1e6,
+                    //    MainX = mainX,
+                    //    MainY = mainY,
+                    //    MainZ = mainZ,
+                    //    AdjaX = adjaX,
+                    //    AdjaY = adjaY,
+                    //    AdjaZ = adjaZ,
+                    //};
+                    //db.CgRes.Add(cgRes);//参估结果入库
+
+                    //var res = PosApi.X2D1_POS(cgRes, listTx);
+                    //PosRes posRes = new PosRes()
+                    //{
+                    //    SigTime = cgRes.SigTime,
+                    //    CgResID = cgRes.ID,
+                    //    TarName = "未知目标",
+                    //    TsName = "tar2",
+                    //    PosLon = res[0],
+                    //    PosLat = res[1],
+                    //    MirrLon = res[3],
+                    //    MirrLat = res[4],
+                    //};
+                    //db.PosRes.Add(posRes);//定位结果入库
+
+                    double[] main_sat = { -1608409.905, 5994264.071, 3139843.443, -6633.016931, -374.023436, -2678.158046 };
+                    double[] neigh_sat1 = { -4629566.829, 4978943.601, 1487242.596, -4890.245126, -3337.702797, -4031.339975 };
+                    double[] neigh_sat2 = { -4629566.829, 4978943.601, 1487242.596, -4890.245126, -3337.702797, -4031.339975 };
+                    double[] Ref_Station_LLH = { 112.33, 16.3, 0 };
+                    double[] Zone = { -80, 80, -150, 150 };
+
+                    double target_dfo1 = 1.595360344349182e+03;
+
+                    double target_dfo2 = 1.132007974492508e+04;
+
+                    double fu1 = 3.1085e8;
+
+
+                    double[] target_llh = new double[6];
+
+                    PosApi.SingleStar_DFO_DW(main_sat, neigh_sat1, neigh_sat2,Zone, target_dfo1, target_dfo2, fu1, target_llh);
+
+                    PosRes posRes = new PosRes()
+                    {
+                        SigTime = DateTime.Now,
+                        CgResID = 1,
+                        TarName = "未知目标",
+                        TsName = "tar2",
+                        PosLon = target_llh[0],
+                        PosLat = target_llh[1],
+                        MirrLon = target_llh[3],
+                        MirrLat = target_llh[4],
+                    };
+                    db.PosRes.Add(posRes);//定位结果入库
+
+                    //更新定位结果UI列表和地图
+                    var currentTask = gridView1.GetFocusedRow() as TaskInfo;
+                    var ds = this.gridPos.DataSource as List<PosRes>;
+                    ds.Insert(0, posRes);
+                    this.Invoke(new Action(() =>
+                    {
+                        gridView1.RefreshData();
+                        mapControl1.AddPosItem(posRes);
+                    }));
+                    await Task.Delay(200);
+                }
+            }
+        }
+
+        private async void DrawErrorEllipse1X()
+        {
+            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>();
+                CgRes cg;
+                using (RHDWContext db = new RHDWContext())
+                {
+                    listTx = db.TxInfos.ToList();
+                    listSat = db.SatInfos.ToList();
+                    cg = await db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefaultAsync();
+
+                }
+                if (cg == null)
+                {
+                    XtraMessageBox.Show($"未找到定位相关的计算[{item.CgResID}]信息");
+                    return;
+                }
+                var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
+                var satNTx = listTx.Find(p => p.TxType == EnumTxType.AdjaSat);
+                var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
+                var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
+                XzXdDw.App.Api.低轨GDOP误差椭圆.ErrorEllipseDTO1XOption Option = new XzXdDw.App.Api.低轨GDOP误差椭圆.ErrorEllipseDTO1XOption();
+                Option.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
+                Option.NsEph1 = new double[] { cg.AdjaX, cg.AdjaY, cg.AdjaZ, 0, 0, 0 };
+                Option.NsEph2 = new double[] { cdbTx.Lon, cdbTx.Lat, 0 };
+                Option.SelectPoint = new double[3] { item.PosLon, item.PosLat, 0 };
+                Option.DfoErr = 1;
+                Option.EphPosErr = 1;
+                Option.EphVelErr = 1;
+                Option.fu = 3.1085e8;
+                var points = XzXdDw.App.Api.低轨GDOP误差椭圆.ErrEllipseHelper.ErrorEllipseSingleX(Option);
+                mapControl1.DrawDtoPonit($"单星[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat}]误差椭圆线", points);
+
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error("绘制误差椭圆线失败", ex);
+                XtraMessageBox.Show($"绘制误差椭圆线失败,失败信息:{ex.Message}");
+            }
+        }
+        public XdCxRhDW.App.DTO.MapLine SampleDots(XdCxRhDW.App.DTO.MapLine line)
+        {
+            var dots = line.Line;
+            if (dots.Count < 30) return line;
+            var tmp = dots.Count / 30;
+            var newLine = new XdCxRhDW.App.DTO.MapLine();
+            for (int i = 0; i < dots.Count; i += tmp)
+            {
+                newLine.Line.Add(dots[i]);
+            }
+            if (!newLine.Line.Contains(dots.Last()))
+                newLine.Line.Add(dots.Last());
+            return newLine;
+        }
+    }
+}

+ 120 - 0
XzXdDw.App/UserControl/CtrlPosSingle.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 55 - 6
XzXdDw.App/UserControl/CtrlPosXd.cs

@@ -85,6 +85,7 @@ namespace XzXdDw.App.UserControl
                     .AddMenu("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), XdPos)
                     .AddMenu("绘制时差线", SvgHelper.LoadFromFile("Image\\DrawLine.svg"), DrawDtoLine)
                     .AddMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), LoadTestData)
+                    .AddMenu("绘制误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), DrawErrorEllipse2X1D)
                     .AddMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), () => stoped = true);
 
 
@@ -149,6 +150,7 @@ namespace XzXdDw.App.UserControl
                             }
                         });
                     })
+                    
                     .AddPosMenu<PosRes>("误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), item =>
                     {
                         string msg = "星地我这里只有GDOP和定位\r\n罗博士和黎强应该有相关算法\r\n关闭后将自动绘制高轨双星误差椭圆";
@@ -351,7 +353,7 @@ namespace XzXdDw.App.UserControl
                 using (RHDWContext db = new RHDWContext())
                 {
                     listTx = db.TxInfos.ToList();
-                    listSat= db.SatInfos.ToList();
+                    listSat = db.SatInfos.ToList();
                     cg = await db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefaultAsync();
 
                 }
@@ -365,8 +367,8 @@ namespace XzXdDw.App.UserControl
                 var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
                 var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
                 DtoLineXdOption dtoLineXd = new DtoLineXdOption();
-                dtoLineXd.MsEph = new double[] { cg.MainX,cg.MainY,cg.MainZ,0,0,0 };
-                dtoLineXd.MsAnt = new double[] { satTx.Lon, satTx.Lat, 0};
+                dtoLineXd.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
+                dtoLineXd.MsAnt = new double[] { satTx.Lon, satTx.Lat, 0 };
                 dtoLineXd.CDBAnt = new double[] { cdbTx.Lon, cdbTx.Lat, 0 };
                 dtoLineXd.RefGeod = new double[] { refTx.Lon, refTx.Lat, 0 };
                 dtoLineXd.xdDto = cg.DtoCdb;
@@ -379,16 +381,16 @@ namespace XzXdDw.App.UserControl
                 DtoLineTwoStartOption twoStartOption = new DtoLineTwoStartOption();
                 twoStartOption.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
                 twoStartOption.NsEph = new double[] { cg.AdjaX, cg.AdjaY, cg.AdjaZ, 0, 0, 0 };
-                twoStartOption.MsAnt= new double[] { satTx.Lon, satTx.Lat, 0 };
+                twoStartOption.MsAnt = new double[] { satTx.Lon, satTx.Lat, 0 };
                 twoStartOption.NsAnt = new double[] { satNTx.Lon, satNTx.Lat, 0 };
                 twoStartOption.RefGeod = new double[] { refTx.Lon, refTx.Lat, 0 };
                 twoStartOption.TargetDto = cg.DtoSx;
                 twoStartOption.RefDto = cg.YbMain - cg.YbAdja;
                 twoStartOption.PosLon = item.PosLon;
                 twoStartOption.PosLat = item.PosLat;
-                var tsDtoLine= DrawDtoLineHelper.DtoLineXDTwoStart(twoStartOption);
+                var tsDtoLine = DrawDtoLineHelper.DtoLineXDTwoStart(twoStartOption);
                 mapControl1.DrawDtoPonit($"双星[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == satNTx.ID)?.Sat}]时差线", tsDtoLine);
-               
+
 
             }
             catch (Exception ex)
@@ -398,7 +400,54 @@ namespace XzXdDw.App.UserControl
             }
         }
 
+        private async void DrawErrorEllipse2X1D()
+        {
+            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>();
+                CgRes cg;
+                using (RHDWContext db = new RHDWContext())
+                {
+                    listTx = db.TxInfos.ToList();
+                    listSat = db.SatInfos.ToList();
+                    cg = await db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefaultAsync();
 
+                }
+                if (cg == null)
+                {
+                    XtraMessageBox.Show($"未找到定位相关的计算[{item.CgResID}]信息");
+                    return;
+                }
+                var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
+                var satNTx = listTx.Find(p => p.TxType == EnumTxType.AdjaSat);
+                var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
+                var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
+                XzXdDw.App.Api.低轨GDOP误差椭圆.ErrorEllipseDTO2X1DOption Option = new XzXdDw.App.Api.低轨GDOP误差椭圆.ErrorEllipseDTO2X1DOption();
+                Option.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
+                Option.NsEph = new double[] { cg.AdjaX, cg.AdjaY, cg.AdjaZ, 0, 0, 0 };
+                Option.CDBAnt = new double[] { cdbTx.Lon, cdbTx.Lat, 0 };
+                Option.RefGeod = new double[] { refTx.Lon, refTx.Lat, 0 };
+                Option.SelectPoint = new double[3] { item.PosLon, item.PosLat, 0 };
+                Option.DtoErr = 1;
+                Option.EphErr = 1;
+                var points = XzXdDw.App.Api.低轨GDOP误差椭圆.ErrEllipseHelper.ErrorEllipse2X1D(Option);
+                mapControl1.DrawDtoPonit($"双星[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == satNTx.ID)?.Sat}]误差椭圆线", points);
+
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error("绘制误差椭圆线失败", ex);
+                XtraMessageBox.Show($"绘制误差椭圆线失败,失败信息:{ex.Message}");
+            }
+        }
         public XdCxRhDW.App.DTO.MapLine SampleDots(XdCxRhDW.App.DTO.MapLine line)
         {
             var dots = line.Line;

+ 1 - 1
XzXdDw.App/UserControl/CtrlPosXz.cs

@@ -85,7 +85,7 @@ namespace XzXdDw.App.UserControl
                     .AddMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), LoadTestData)
                      .AddMenu("绘制时差线", SvgHelper.LoadFromFile("Image\\DrawLine.svg"), DrawDtoLine)
                      .AddMenu("绘制频差线", SvgHelper.LoadFromFile("Image\\DfoLine.svg"), DrawDfoLine)
-                     .AddMenu("绘制误差椭圆", SvgHelper.LoadFromFile("Image\\ErrorEllipse.svg"), DrawErrorEllipseDTFO)
+                     .AddMenu("绘制误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), DrawErrorEllipseDTFO)
                     .AddMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), () => stoped = true);
 
 

+ 9 - 0
XzXdDw.App/XzXdDw.App.csproj

@@ -222,6 +222,12 @@
     <Compile Include="UserControl\CtrlCgTool.Designer.cs">
       <DependentUpon>CtrlCgTool.cs</DependentUpon>
     </Compile>
+    <Compile Include="UserControl\CtrlPosSingle.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UserControl\CtrlPosSingle.Designer.cs">
+      <DependentUpon>CtrlPosSingle.cs</DependentUpon>
+    </Compile>
     <Compile Include="UserControl\CtrlPosXz.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -306,6 +312,9 @@
     <EmbeddedResource Include="MainForm.resx">
       <DependentUpon>MainForm.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="UserControl\CtrlPosSingle.resx">
+      <DependentUpon>CtrlPosSingle.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="UserControl\DtSXLParam.resx">
       <DependentUpon>DtSXLParam.cs</DependentUpon>
     </EmbeddedResource>