zoulei 1 year ago
parent
commit
b79d0fceb5

+ 17 - 15
XdCxRhDW.Api/AddIns/GDOP误差椭圆/ErrEllipseHepler.cs

@@ -15,20 +15,20 @@ namespace XdCxRhDW.Api
     public static class ErrEllipseHepler
     {
 
-        private const string ErrellipDll = @"AddIns\GDOP误差椭圆\DLL_GDOP_Analysis0415";
+        private const string ErrellipDll = @"AddIns\GDOP误差椭圆\DLL_GDOP_Analysis0623";
 
         /// <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="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>
+        /// <param name="eph_err">星历误差(m)</param>
+        /// <param name="Pe">概率,范围(0,1),默认0.5</param>
+        /// <param name="LOP_Len">输出参数</param>
         /// <returns></returns>
         [DllImport(ErrellipDll, EntryPoint = "Error_Ellipse_2X1D", CallingConvention = CallingConvention.Cdecl)]
         private extern static IntPtr Error_Ellipse_2X1D(double[] main_eph, double[] neigh_eph, double[] cdbAnt, double[] refStation, double[] Select_Point, double dto_err,
@@ -43,7 +43,7 @@ namespace XdCxRhDW.Api
         /// <param name="refStation">参考站 长度3</param>
         /// <param name="Select_Point">定位点 长度3</param>
         /// <param name="dto_err">时差误差(s)</param>
-        /// <param name="eph_err"></param>
+        /// <param name="eph_err">星历误差(m)</param>
         /// <param name="Pe">0.5</param>
         /// <param name="LOP_Len"></param>
         /// <returns></returns>
@@ -52,7 +52,7 @@ namespace XdCxRhDW.Api
         double eph_err, double Pe, ref int LOP_Len);
 
         /// <summary>
-        /// 获取误差椭圆的长轴(m)、短轴(m)、倾角(°)
+        /// 两星一地带参误差椭圆
         /// </summary>
         /// <param name="posLon"></param>
         /// <param name="posLat"></param>
@@ -91,7 +91,7 @@ namespace XdCxRhDW.Api
             {
                 int count = LOP_Value.Length - 3;
 
-                for (int i = 0; i < count; i += 2)//13 ---01 23 45 67 89
+                for (int i = 0; i < count; i += 2)
                 {
                     res.GeoPoints.Add(new GeoPoint()
                     {
@@ -104,7 +104,7 @@ namespace XdCxRhDW.Api
         }
 
         /// <summary>
-        /// 获取误差椭圆的长轴(m)、短轴(m)、倾角(°)
+        /// 两星一地无参误差椭圆
         /// </summary>
         /// <param name="posLon"></param>
         /// <param name="posLat"></param>
@@ -141,7 +141,7 @@ namespace XdCxRhDW.Api
             {
                 int count = LOP_Value.Length - 3;
 
-                for (int i = 0; i < count; i += 2)//13 ---01 23 45 67 89
+                for (int i = 0; i < count; i += 2)
                 {
                     res.GeoPoints.Add(new GeoPoint()
                     {
@@ -152,5 +152,7 @@ namespace XdCxRhDW.Api
             }
             return res;
         }
+
+
     }
 }

+ 1 - 8
XdCxRhDW.App/App.config

@@ -6,7 +6,7 @@
 	<appSettings>
 		
 		<!--程序标题-->
-		<add key="SystemName" value="多模式融合定位平台" />
+		<add key="SystemName" value="合定位平台" />
 		
 		<!--公司名称(没有则不会显示版权)-->
 		<add key="Company" value="" />
@@ -14,19 +14,12 @@
 		<!--本机IP,没有则由程序自动获取-->
 		<add key="LocalIP" value="" />
 
-		<!--自采集地图源URL-->
-		<add key="ZCJ_URL" value="http://192.168.1.7:12338/static/source/assets/textures" />
-
-		<!--数据中心地图源URL-->
-		<add key="SJZX_URL" value="http://192.168.1.7:5889/MapServer" />
-
 		<!--地图定位点聚合-->
 		<add key="UseMapCluster" value="0" />
 
 		<!--两星一地无参定位算法使用新算法-->
 		<add key="UseNewPosX2D1NoRef" value="1" />
 
-
 		<!--GDOP使用最新的版本  1:使用-->
 		<add key="UseNewGDOP" value="1" />
 

+ 585 - 0
XdCxRhDW.App/EditForms/X2D1EllipesEditor.Designer.cs

@@ -0,0 +1,585 @@
+namespace XdCxRhDW.App.EditForms
+{
+    partial class X2D1EllipesEditor
+    {
+        /// <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 Windows Form 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.components = new System.ComponentModel.Container();
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions3 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject9 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject10 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject11 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject12 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject1 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject2 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject3 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject4 = new DevExpress.Utils.SerializableAppearanceObject();
+            this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            this.txtSigTime = new DevExpress.XtraEditors.DateEdit();
+            this.txtsatStation = new DevExpress.XtraEditors.TextEdit();
+            this.txtcdbStation = new DevExpress.XtraEditors.TextEdit();
+            this.txtRefLocation = new DevExpress.XtraEditors.TextEdit();
+            this.btnDtoLine = new DevExpress.XtraEditors.SimpleButton();
+            this.btnEphCalc = new DevExpress.XtraEditors.SimpleButton();
+            this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            this.emptySpaceItem3 = new DevExpress.XtraLayout.EmptySpaceItem();
+            this.layoutControlItem14 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem9 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem10 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.itemSigTime = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem17 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.txtPosRes = new DevExpress.XtraLayout.SimpleLabelItem();
+            this.dxErrorProvider = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(this.components);
+            this.txtDtousErr1 = new DevExpress.XtraEditors.ButtonEdit();
+            this.txtSatLocErr1 = new DevExpress.XtraEditors.ButtonEdit();
+            this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.txtPE = new DevExpress.XtraEditors.TextEdit();
+            this.layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.txtEphMain = new XdCxRhDW.App.UserControl.UCEphXYZParam();
+            this.layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.txtEphAdja = new XdCxRhDW.App.UserControl.UCEphXYZParam();
+            this.layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            this.txtPosLocation = new DevExpress.XtraEditors.TextEdit();
+            this.layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
+            this.layoutControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.txtSigTime.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtSigTime.Properties.CalendarTimeProperties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtsatStation.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtcdbStation.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtRefLocation.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem3)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem14)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem9)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem10)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.itemSigTime)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem17)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtPosRes)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dxErrorProvider)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtDtousErr1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtSatLocErr1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem6)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtPE.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem7)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem8)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtPosLocation.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            this.layoutControl1.Controls.Add(this.txtSigTime);
+            this.layoutControl1.Controls.Add(this.txtsatStation);
+            this.layoutControl1.Controls.Add(this.txtcdbStation);
+            this.layoutControl1.Controls.Add(this.txtRefLocation);
+            this.layoutControl1.Controls.Add(this.btnDtoLine);
+            this.layoutControl1.Controls.Add(this.btnEphCalc);
+            this.layoutControl1.Controls.Add(this.txtDtousErr1);
+            this.layoutControl1.Controls.Add(this.txtSatLocErr1);
+            this.layoutControl1.Controls.Add(this.txtPE);
+            this.layoutControl1.Controls.Add(this.txtEphMain);
+            this.layoutControl1.Controls.Add(this.txtEphAdja);
+            this.layoutControl1.Controls.Add(this.txtPosLocation);
+            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(831, 101, 650, 400);
+            this.layoutControl1.Root = this.Root;
+            this.layoutControl1.Size = new System.Drawing.Size(648, 428);
+            this.layoutControl1.TabIndex = 0;
+            this.layoutControl1.Text = "layoutControl1";
+            // 
+            // txtSigTime
+            // 
+            this.txtSigTime.EditValue = null;
+            this.txtSigTime.Location = new System.Drawing.Point(12, 75);
+            this.txtSigTime.Name = "txtSigTime";
+            this.txtSigTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtSigTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtSigTime.Properties.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
+            this.txtSigTime.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
+            this.txtSigTime.Properties.EditFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
+            this.txtSigTime.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
+            this.txtSigTime.Properties.MaskSettings.Set("mask", "yyyy-MM-dd HH:mm:ss");
+            this.txtSigTime.Size = new System.Drawing.Size(622, 20);
+            this.txtSigTime.StyleController = this.layoutControl1;
+            this.txtSigTime.TabIndex = 9;
+            // 
+            // txtsatStation
+            // 
+            this.txtsatStation.EditValue = "";
+            this.txtsatStation.Location = new System.Drawing.Point(14, 29);
+            this.txtsatStation.MaximumSize = new System.Drawing.Size(0, 20);
+            this.txtsatStation.Name = "txtsatStation";
+            this.txtsatStation.Properties.AutoHeight = false;
+            this.txtsatStation.Size = new System.Drawing.Size(151, 20);
+            this.txtsatStation.StyleController = this.layoutControl1;
+            this.txtsatStation.TabIndex = 10;
+            this.txtsatStation.ToolTip = "经度纬度之间用英文逗号隔开";
+            // 
+            // txtcdbStation
+            // 
+            this.txtcdbStation.EditValue = "";
+            this.txtcdbStation.Location = new System.Drawing.Point(169, 29);
+            this.txtcdbStation.MaximumSize = new System.Drawing.Size(0, 20);
+            this.txtcdbStation.Name = "txtcdbStation";
+            this.txtcdbStation.Properties.AutoHeight = false;
+            this.txtcdbStation.Size = new System.Drawing.Size(153, 20);
+            this.txtcdbStation.StyleController = this.layoutControl1;
+            this.txtcdbStation.TabIndex = 10;
+            this.txtcdbStation.ToolTip = "经度纬度之间用英文逗号隔开";
+            // 
+            // txtRefLocation
+            // 
+            this.txtRefLocation.EditValue = "";
+            this.txtRefLocation.Location = new System.Drawing.Point(483, 29);
+            this.txtRefLocation.MaximumSize = new System.Drawing.Size(0, 20);
+            this.txtRefLocation.Name = "txtRefLocation";
+            this.txtRefLocation.Properties.AutoHeight = false;
+            this.txtRefLocation.Size = new System.Drawing.Size(151, 20);
+            this.txtRefLocation.StyleController = this.layoutControl1;
+            this.txtRefLocation.TabIndex = 10;
+            this.txtRefLocation.ToolTip = "经度纬度之间用英文逗号隔开";
+            // 
+            // btnDtoLine
+            // 
+            this.btnDtoLine.Location = new System.Drawing.Point(538, 341);
+            this.btnDtoLine.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.btnDtoLine.Name = "btnDtoLine";
+            this.btnDtoLine.Size = new System.Drawing.Size(96, 22);
+            this.btnDtoLine.StyleController = this.layoutControl1;
+            this.btnDtoLine.TabIndex = 12;
+            this.btnDtoLine.Text = "误差椭圆";
+            this.btnDtoLine.Click += new System.EventHandler(this.btnDtoLine_Click);
+            // 
+            // btnEphCalc
+            // 
+            this.btnEphCalc.Location = new System.Drawing.Point(430, 341);
+            this.btnEphCalc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.btnEphCalc.Name = "btnEphCalc";
+            this.btnEphCalc.Size = new System.Drawing.Size(96, 22);
+            this.btnEphCalc.StyleController = this.layoutControl1;
+            this.btnEphCalc.TabIndex = 12;
+            this.btnEphCalc.Text = "重新计算星历";
+            this.btnEphCalc.ToolTip = "根据信号时间使用匹配的双行根重新推算星历";
+            this.btnEphCalc.Click += new System.EventHandler(this.btnEphCalc_Click);
+            // 
+            // Root
+            // 
+            this.Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            this.Root.GroupBordersVisible = false;
+            this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+            this.emptySpaceItem3,
+            this.layoutControlItem14,
+            this.layoutControlItem9,
+            this.layoutControlItem10,
+            this.itemSigTime,
+            this.layoutControlItem17,
+            this.layoutControlItem5,
+            this.txtPosRes,
+            this.layoutControlItem2,
+            this.layoutControlItem6,
+            this.layoutControlItem7,
+            this.layoutControlItem8,
+            this.layoutControlItem3,
+            this.emptySpaceItem1,
+            this.layoutControlItem4});
+            this.Root.Name = "Root";
+            this.Root.Size = new System.Drawing.Size(648, 428);
+            this.Root.TextVisible = false;
+            // 
+            // emptySpaceItem3
+            // 
+            this.emptySpaceItem3.AllowHotTrack = false;
+            this.emptySpaceItem3.Location = new System.Drawing.Point(0, 322);
+            this.emptySpaceItem3.Name = "emptySpaceItem3";
+            this.emptySpaceItem3.Size = new System.Drawing.Size(418, 33);
+            this.emptySpaceItem3.TextSize = new System.Drawing.Size(0, 0);
+            // 
+            // layoutControlItem14
+            // 
+            this.layoutControlItem14.Control = this.txtsatStation;
+            this.layoutControlItem14.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem14.CustomizationFormText = "参考站经纬度";
+            this.layoutControlItem14.Location = new System.Drawing.Point(0, 0);
+            this.layoutControlItem14.MaxSize = new System.Drawing.Size(0, 46);
+            this.layoutControlItem14.MinSize = new System.Drawing.Size(77, 46);
+            this.layoutControlItem14.Name = "layoutControlItem14";
+            this.layoutControlItem14.Size = new System.Drawing.Size(157, 46);
+            this.layoutControlItem14.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem14.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 0, 0, 0);
+            this.layoutControlItem14.Text = "接收站经纬度";
+            this.layoutControlItem14.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem14.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem9
+            // 
+            this.layoutControlItem9.Control = this.txtcdbStation;
+            this.layoutControlItem9.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem9.CustomizationFormText = "参考站经纬度";
+            this.layoutControlItem9.Location = new System.Drawing.Point(157, 0);
+            this.layoutControlItem9.MaxSize = new System.Drawing.Size(0, 46);
+            this.layoutControlItem9.MinSize = new System.Drawing.Size(77, 46);
+            this.layoutControlItem9.Name = "layoutControlItem9";
+            this.layoutControlItem9.Size = new System.Drawing.Size(157, 46);
+            this.layoutControlItem9.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem9.Text = "超短波经纬度";
+            this.layoutControlItem9.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem9.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem10
+            // 
+            this.layoutControlItem10.Control = this.txtRefLocation;
+            this.layoutControlItem10.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem10.CustomizationFormText = "参考站经纬度";
+            this.layoutControlItem10.Location = new System.Drawing.Point(471, 0);
+            this.layoutControlItem10.MaxSize = new System.Drawing.Size(0, 46);
+            this.layoutControlItem10.MinSize = new System.Drawing.Size(77, 46);
+            this.layoutControlItem10.Name = "layoutControlItem10";
+            this.layoutControlItem10.Size = new System.Drawing.Size(157, 46);
+            this.layoutControlItem10.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem10.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 2, 0, 0);
+            this.layoutControlItem10.Text = "参考站经纬度";
+            this.layoutControlItem10.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem10.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // itemSigTime
+            // 
+            this.itemSigTime.Control = this.txtSigTime;
+            this.itemSigTime.Location = new System.Drawing.Point(0, 46);
+            this.itemSigTime.MaxSize = new System.Drawing.Size(0, 46);
+            this.itemSigTime.MinSize = new System.Drawing.Size(76, 46);
+            this.itemSigTime.Name = "itemSigTime";
+            this.itemSigTime.Size = new System.Drawing.Size(628, 46);
+            this.itemSigTime.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.itemSigTime.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 2, 0, 0);
+            this.itemSigTime.Text = "信号时间";
+            this.itemSigTime.TextLocation = DevExpress.Utils.Locations.Top;
+            this.itemSigTime.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem17
+            // 
+            this.layoutControlItem17.Control = this.btnDtoLine;
+            this.layoutControlItem17.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem17.CustomizationFormText = "layoutControlItem1";
+            this.layoutControlItem17.Location = new System.Drawing.Point(518, 322);
+            this.layoutControlItem17.MaxSize = new System.Drawing.Size(110, 0);
+            this.layoutControlItem17.MinSize = new System.Drawing.Size(110, 33);
+            this.layoutControlItem17.Name = "layoutControlItem17";
+            this.layoutControlItem17.Padding = new DevExpress.XtraLayout.Utils.Padding(10, 2, 9, 2);
+            this.layoutControlItem17.Size = new System.Drawing.Size(110, 33);
+            this.layoutControlItem17.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem17.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 2, 0, 0);
+            this.layoutControlItem17.Text = "layoutControlItem1";
+            this.layoutControlItem17.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem17.TextVisible = false;
+            // 
+            // layoutControlItem5
+            // 
+            this.layoutControlItem5.Control = this.btnEphCalc;
+            this.layoutControlItem5.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem5.CustomizationFormText = "layoutControlItem1";
+            this.layoutControlItem5.Location = new System.Drawing.Point(418, 322);
+            this.layoutControlItem5.MaxSize = new System.Drawing.Size(100, 33);
+            this.layoutControlItem5.MinSize = new System.Drawing.Size(100, 33);
+            this.layoutControlItem5.Name = "layoutControlItem5";
+            this.layoutControlItem5.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
+            this.layoutControlItem5.Size = new System.Drawing.Size(100, 33);
+            this.layoutControlItem5.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem5.Text = "layoutControlItem1";
+            this.layoutControlItem5.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem5.TextVisible = false;
+            // 
+            // txtPosRes
+            // 
+            this.txtPosRes.AllowHotTrack = false;
+            this.txtPosRes.Location = new System.Drawing.Point(0, 355);
+            this.txtPosRes.MaxSize = new System.Drawing.Size(0, 24);
+            this.txtPosRes.MinSize = new System.Drawing.Size(126, 24);
+            this.txtPosRes.Name = "txtPosRes";
+            this.txtPosRes.Size = new System.Drawing.Size(628, 24);
+            this.txtPosRes.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.txtPosRes.Text = " ";
+            this.txtPosRes.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // dxErrorProvider
+            // 
+            this.dxErrorProvider.ContainerControl = this;
+            // 
+            // txtDtousErr1
+            // 
+            this.txtDtousErr1.EditValue = "10";
+            this.txtDtousErr1.Location = new System.Drawing.Point(14, 305);
+            this.txtDtousErr1.Margin = new System.Windows.Forms.Padding(2);
+            this.txtDtousErr1.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtDtousErr1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtDtousErr1.Name = "txtDtousErr1";
+            this.txtDtousErr1.Properties.AutoHeight = false;
+            this.txtDtousErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "us", -1, false, true, false, editorButtonImageOptions3, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject9, serializableAppearanceObject10, serializableAppearanceObject11, serializableAppearanceObject12, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            this.txtDtousErr1.Size = new System.Drawing.Size(201, 22);
+            this.txtDtousErr1.StyleController = this.layoutControl1;
+            this.txtDtousErr1.TabIndex = 6;
+            this.txtDtousErr1.ToolTip = "时差误差";
+            // 
+            // txtSatLocErr1
+            // 
+            this.txtSatLocErr1.EditValue = "10000";
+            this.txtSatLocErr1.Location = new System.Drawing.Point(223, 305);
+            this.txtSatLocErr1.Margin = new System.Windows.Forms.Padding(2);
+            this.txtSatLocErr1.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtSatLocErr1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtSatLocErr1.Name = "txtSatLocErr1";
+            this.txtSatLocErr1.Properties.AutoHeight = false;
+            this.txtSatLocErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "m", -1, false, true, false, editorButtonImageOptions1, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            this.txtSatLocErr1.Size = new System.Drawing.Size(201, 22);
+            this.txtSatLocErr1.StyleController = this.layoutControl1;
+            this.txtSatLocErr1.TabIndex = 6;
+            this.txtSatLocErr1.ToolTip = "星历位置误差";
+            // 
+            // layoutControlItem2
+            // 
+            this.layoutControlItem2.Control = this.txtDtousErr1;
+            this.layoutControlItem2.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem2.CustomizationFormText = "低轨卫星X";
+            this.layoutControlItem2.Location = new System.Drawing.Point(0, 276);
+            this.layoutControlItem2.Name = "layoutControlItem2";
+            this.layoutControlItem2.Size = new System.Drawing.Size(209, 46);
+            this.layoutControlItem2.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 2, 0, 0);
+            this.layoutControlItem2.Text = "时差误差";
+            this.layoutControlItem2.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem2.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem6
+            // 
+            this.layoutControlItem6.Control = this.txtSatLocErr1;
+            this.layoutControlItem6.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem6.CustomizationFormText = "低轨卫星X";
+            this.layoutControlItem6.Location = new System.Drawing.Point(209, 276);
+            this.layoutControlItem6.Name = "layoutControlItem6";
+            this.layoutControlItem6.Size = new System.Drawing.Size(209, 46);
+            this.layoutControlItem6.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 2, 0, 0);
+            this.layoutControlItem6.Text = "星历误差";
+            this.layoutControlItem6.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem6.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // txtPE
+            // 
+            this.txtPE.EditValue = "0.5";
+            this.txtPE.Location = new System.Drawing.Point(432, 305);
+            this.txtPE.MaximumSize = new System.Drawing.Size(0, 20);
+            this.txtPE.Name = "txtPE";
+            this.txtPE.Properties.AutoHeight = false;
+            this.txtPE.Size = new System.Drawing.Size(204, 20);
+            this.txtPE.StyleController = this.layoutControl1;
+            this.txtPE.TabIndex = 10;
+            this.txtPE.ToolTip = "范围0-1";
+            // 
+            // layoutControlItem7
+            // 
+            this.layoutControlItem7.Control = this.txtPE;
+            this.layoutControlItem7.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem7.CustomizationFormText = "参考站经纬度";
+            this.layoutControlItem7.Location = new System.Drawing.Point(418, 276);
+            this.layoutControlItem7.MaxSize = new System.Drawing.Size(0, 46);
+            this.layoutControlItem7.MinSize = new System.Drawing.Size(77, 46);
+            this.layoutControlItem7.Name = "layoutControlItem7";
+            this.layoutControlItem7.Size = new System.Drawing.Size(210, 46);
+            this.layoutControlItem7.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem7.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 0, 0, 0);
+            this.layoutControlItem7.Text = "概率";
+            this.layoutControlItem7.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem7.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // txtEphMain
+            // 
+            this.txtEphMain.Location = new System.Drawing.Point(12, 104);
+            this.txtEphMain.Name = "txtEphMain";
+            this.txtEphMain.Size = new System.Drawing.Size(624, 88);
+            this.txtEphMain.TabIndex = 14;
+            // 
+            // layoutControlItem8
+            // 
+            this.layoutControlItem8.Control = this.txtEphMain;
+            this.layoutControlItem8.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem8.CustomizationFormText = "layoutControlItem3";
+            this.layoutControlItem8.Location = new System.Drawing.Point(0, 92);
+            this.layoutControlItem8.MaxSize = new System.Drawing.Size(0, 92);
+            this.layoutControlItem8.MinSize = new System.Drawing.Size(190, 92);
+            this.layoutControlItem8.Name = "layoutControlItem8";
+            this.layoutControlItem8.Size = new System.Drawing.Size(628, 92);
+            this.layoutControlItem8.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem8.Text = "layoutControlItem3";
+            this.layoutControlItem8.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem8.TextVisible = false;
+            // 
+            // txtEphAdja
+            // 
+            this.txtEphAdja.Location = new System.Drawing.Point(12, 196);
+            this.txtEphAdja.Name = "txtEphAdja";
+            this.txtEphAdja.Size = new System.Drawing.Size(624, 88);
+            this.txtEphAdja.TabIndex = 14;
+            // 
+            // layoutControlItem3
+            // 
+            this.layoutControlItem3.Control = this.txtEphAdja;
+            this.layoutControlItem3.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem3.CustomizationFormText = "layoutControlItem3";
+            this.layoutControlItem3.Location = new System.Drawing.Point(0, 184);
+            this.layoutControlItem3.MaxSize = new System.Drawing.Size(0, 92);
+            this.layoutControlItem3.MinSize = new System.Drawing.Size(190, 92);
+            this.layoutControlItem3.Name = "layoutControlItem3";
+            this.layoutControlItem3.Size = new System.Drawing.Size(628, 92);
+            this.layoutControlItem3.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem3.Text = "layoutControlItem3";
+            this.layoutControlItem3.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem3.TextVisible = false;
+            // 
+            // emptySpaceItem1
+            // 
+            this.emptySpaceItem1.AllowHotTrack = false;
+            this.emptySpaceItem1.Location = new System.Drawing.Point(0, 379);
+            this.emptySpaceItem1.MinSize = new System.Drawing.Size(104, 24);
+            this.emptySpaceItem1.Name = "emptySpaceItem1";
+            this.emptySpaceItem1.Size = new System.Drawing.Size(628, 29);
+            this.emptySpaceItem1.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0);
+            // 
+            // txtPosLocation
+            // 
+            this.txtPosLocation.EditValue = "";
+            this.txtPosLocation.Location = new System.Drawing.Point(326, 29);
+            this.txtPosLocation.MaximumSize = new System.Drawing.Size(0, 20);
+            this.txtPosLocation.Name = "txtPosLocation";
+            this.txtPosLocation.Properties.AutoHeight = false;
+            this.txtPosLocation.Size = new System.Drawing.Size(151, 20);
+            this.txtPosLocation.StyleController = this.layoutControl1;
+            this.txtPosLocation.TabIndex = 10;
+            this.txtPosLocation.ToolTip = "经度纬度之间用英文逗号隔开";
+            // 
+            // layoutControlItem4
+            // 
+            this.layoutControlItem4.Control = this.txtPosLocation;
+            this.layoutControlItem4.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem4.CustomizationFormText = "定位点";
+            this.layoutControlItem4.Location = new System.Drawing.Point(314, 0);
+            this.layoutControlItem4.MaxSize = new System.Drawing.Size(0, 46);
+            this.layoutControlItem4.MinSize = new System.Drawing.Size(77, 46);
+            this.layoutControlItem4.Name = "layoutControlItem4";
+            this.layoutControlItem4.Size = new System.Drawing.Size(157, 46);
+            this.layoutControlItem4.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem4.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 2, 0, 0);
+            this.layoutControlItem4.Text = "定位点";
+            this.layoutControlItem4.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem4.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // X2D1EllipesEditor
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.layoutControl1);
+            this.Name = "X2D1EllipesEditor";
+            this.Size = new System.Drawing.Size(648, 428);
+            this.Load += new System.EventHandler(this.X2D1DTOParamEditor_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
+            this.layoutControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.txtSigTime.Properties.CalendarTimeProperties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtSigTime.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtsatStation.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtcdbStation.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtRefLocation.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem3)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem14)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem9)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem10)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.itemSigTime)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem17)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtPosRes)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dxErrorProvider)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtDtousErr1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtSatLocErr1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem6)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtPE.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem7)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem8)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtPosLocation.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraEditors.DateEdit txtSigTime;
+        private DevExpress.XtraLayout.LayoutControlItem itemSigTime;
+        private DevExpress.XtraEditors.TextEdit txtsatStation;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem14;
+        private DevExpress.XtraEditors.TextEdit txtcdbStation;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem9;
+        private DevExpress.XtraEditors.TextEdit txtRefLocation;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem10;
+        private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem3;
+        private DevExpress.XtraEditors.SimpleButton btnDtoLine;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem17;
+        private DevExpress.XtraEditors.SimpleButton btnEphCalc;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
+        private DevExpress.XtraLayout.SimpleLabelItem txtPosRes;
+        private DevExpress.XtraEditors.ButtonEdit txtDtousErr1;
+        private DevExpress.XtraEditors.ButtonEdit txtSatLocErr1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
+        private DevExpress.XtraEditors.TextEdit txtPE;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
+        private UserControl.UCEphXYZParam txtEphMain;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
+        private UserControl.UCEphXYZParam txtEphAdja;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraEditors.TextEdit txtPosLocation;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+    }
+}

+ 191 - 0
XdCxRhDW.App/EditForms/X2D1EllipesEditor.cs

@@ -0,0 +1,191 @@
+using DevExpress.XtraMap;
+using DxHelper;
+using ExtensionsDev;
+using System;
+using System.CodeDom;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Configuration;
+using System.Data;
+using System.Data.Entity;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XdCxRhDW.Api;
+using XdCxRhDW.Dto;
+using XdCxRhDW.Entity;
+using XdCxRhDW.Repostory;
+
+namespace XdCxRhDW.App.EditForms
+{
+    public partial class X2D1EllipesEditor : DevExpress.XtraEditors.XtraUserControl
+    {
+        private MapControl mapControl1;
+        private PosRes info;
+        private CgRes cg;
+        private List<SatInfo> listSat;
+        public X2D1EllipesEditor(PosRes info, MapControl mapControl)
+        {
+            InitializeComponent();
+            this.info = info;
+            itemSigTime.Text = $"{itemSigTime.Text}({SysConfig.Config.TimeZoneUTC})";
+            this.layoutControl1.UseDefault();
+            txtSigTime.UseDefault();
+            this.listSat = new List<SatInfo>();
+            this.mapControl1 = mapControl;
+        }
+
+
+        private async void X2D1DTOParamEditor_Load(object sender, EventArgs e)
+        {
+            this.layoutControl1.BestFit();
+            StationRes station = null;
+            using (RHDWContext db = new RHDWContext())
+            {
+                listSat = await db.SatInfos.ToListAsync();
+            }
+            using (RHDWPartContext db = RHDWPartContext.GetContext(info.SigTime))
+            {
+                cg = await db?.CgRes.Where(m => m.ID == info.CgResID).FirstOrDefaultAsync();
+                station = await db?.StationRes.Where(m => m.ID == info.StationResID).FirstOrDefaultAsync();
+            }
+            if (cg != null)
+            {
+                this.txtSigTime.EditValue = info.SigTime;
+                txtEphMain.SetParam("主星", cg.MainCode, (cg.MainX, cg.MainY, cg.MainZ, cg.MainVx, cg.MainVy, cg.MainVz), Color.Black);
+                txtEphAdja.SetParam("邻星", cg.Adja1Code, (cg.Adja1X, cg.Adja1Y, cg.Adja1Z, cg.Adja1Vx, cg.Adja1Vy, cg.Adja1Vz), Color.Black);
+            }
+            if (station != null)
+            {
+                this.txtsatStation.Text = $"{station.SatTxLon},{station.SatTxLat}";
+                this.txtcdbStation.Text = $"{station.CdbTxLon},{station.CdbTxLat}";
+                this.txtRefLocation.Text = $"{station.RefLon},{station.RefLat}";
+            }
+            if (info.PosResType == EnumPosResType.X2D1NoRef)
+            {
+                txtRefLocation.Properties.ReadOnly = true;
+                this.txtRefLocation.Text = $"{0},{0}";
+            }
+
+        }
+
+
+
+        public bool CheckParam()
+        {
+            dxErrorProvider.ClearErrors();
+            if (!txtsatStation.CheckLonLat(dxErrorProvider, "接收站"))
+            {
+                return false;
+            }
+            if (!txtcdbStation.CheckLonLat(dxErrorProvider, "超短波"))
+            {
+                return false;
+            }
+            if (!txtEphMain.CheckEph(dxErrorProvider))
+            {
+                return false;
+            }
+            if (!txtEphAdja.CheckEph(dxErrorProvider))
+            {
+                return false;
+            }
+            return true;
+        }
+
+        private async void btnDtoLine_Click(object sender, EventArgs e)
+        {
+            if (!CheckParam()) { return; }
+            try
+            {
+                var MsAnt = txtsatStation.GetLonLat();
+                var CDBAnt = txtcdbStation.GetLonLat();
+                var pos = txtPosLocation.GetLonLat();
+                var RefGeod = txtRefLocation.GetLonLat();
+                double[] ephMain = txtEphMain.EphParam();
+                double[] ephAdja = txtEphAdja.EphParam();
+                var dto = new ErrEllipseX2D1Dto()
+                {
+                    MainX = ephMain[0],
+                    MainY = ephMain[1],
+                    MainZ = ephMain[2],
+                    AdjaX = ephAdja[0],
+                    AdjaY = ephAdja[1],
+                    AdjaZ = ephAdja[2],
+                    CdbLon = CDBAnt[0],
+                    CdbLat = CDBAnt[1],
+                    RefLon = RefGeod[0],
+                    RefLat = RefGeod[1],
+                    PosLon = pos[0],
+                    PosLat = pos[1],
+                    DtoErrus = Convert.ToDouble(txtDtousErr1.Text),
+                    EphErr = Convert.ToDouble(txtSatLocErr1.Text),
+                    OutputErrPoint = true,
+                };
+                if (info.PosResType == EnumPosResType.X2D1)
+                {
+                    dto = dto.WithRef(RefGeod[0], RefGeod[1]);
+                }
+                var rsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(SysConfig.GetUrl("DetectCg/ErrorEllipse2X1D"), dto, 30);
+                if (rsp.code != 200)
+                {
+                    await LogHelper.Error($"绘制{info.PosResType.GetEnumDisplayName()}误差椭圆失败,{rsp.msg}");
+                    DxHelper.MsgBoxHelper.ShowWarning($"绘制{info.PosResType.GetEnumDisplayName()}误差椭圆失败,{rsp.msg}");
+                }
+                else
+                {
+                    this.mapControl1.DrawErrEllipse(rsp.data.LongRadius, rsp.data.ShortRadius, rsp.data.GeoPoints.Select(t => (t.Lon, t.Lat)));
+                    this.txtPosRes.Text = $"{info.PosResType.GetEnumDisplayName()}误差椭圆.长半轴={rsp.data.LongRadius:f1},短半轴={rsp.data.ShortRadius:f1},倾角={rsp.data.DipAngle:f2}";
+                }
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error(ex, $"绘制{info.PosResType.GetEnumDisplayName()}时差线失败.PosID={info.ID},SigTime={info.SigTime}");
+                DxHelper.MsgBoxHelper.ShowWarning($"绘制{info.PosResType.GetEnumDisplayName()}时差线失败,{ex.Message}");
+            }
+        }
+
+        private async void btnEphCalc_Click(object sender, EventArgs e)
+        {
+            dxErrorProvider.ClearErrors();
+            if (this.txtSigTime.DateTime == DateTime.MinValue)
+            {
+                dxErrorProvider.SetError(txtSigTime, "信号时间不能为空!");
+                return;
+            }
+            var sigTime = this.txtSigTime.DateTime;
+            try
+            {
+
+                var mainxlInfo = await XlRepository.GetLatestAsync(cg.MainCode.Value, sigTime);
+                if (mainxlInfo == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"卫星:{cg.MainCode.Value}未找到对应的星历信息,请导入星历");
+                    return;
+                }
+                var XlCalcDto = new XlCalcDto() { tleStr = mainxlInfo.TwoLine, SigTime = sigTime };
+                var maineph = await HttpHelper.PostRequestAsync<SatEphResDto>(SysConfig.GetUrl("Xl/Calc"), XlCalcDto);
+                txtEphMain.SetParam("主星", cg.MainCode.Value, (maineph.data.X, maineph.data.Y, maineph.data.Z, maineph.data.VX, maineph.data.VY, maineph.data.VZ), Color.Red);
+
+                var adjaxlInfo = await XlRepository.GetLatestAsync(cg.Adja1Code.Value, sigTime);
+                if (adjaxlInfo == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"卫星:{cg.Adja1Code.Value}未找到对应的星历信息,请导入星历");
+                    return;
+                }
+                XlCalcDto = new XlCalcDto() { tleStr = adjaxlInfo.TwoLine, SigTime = sigTime };
+                var adjaeph = await HttpHelper.PostRequestAsync<SatEphResDto>(SysConfig.GetUrl("Xl/Calc"), XlCalcDto);
+                txtEphAdja.SetParam("邻星", cg.Adja1Code.Value, (adjaeph.data.X, adjaeph.data.Y, adjaeph.data.Z, adjaeph.data.VX, adjaeph.data.VY, adjaeph.data.VZ), Color.Red);
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error(ex, $"手动推算{info.PosResType.GetEnumDisplayName()}星历失败,SigTime={sigTime}");
+                DxHelper.MsgBoxHelper.ShowError($"手动推算{info.PosResType.GetEnumDisplayName()}星历失败,{ex.Message}");
+            }
+
+
+        }
+
+    }
+}

+ 123 - 0
XdCxRhDW.App/EditForms/X2D1EllipesEditor.resx

@@ -0,0 +1,123 @@
+<?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>
+  <metadata name="dxErrorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>

+ 2 - 1
XdCxRhDW.App/MainForm.cs

@@ -97,7 +97,8 @@ namespace XdCxRhDW
         {
             try
             {
-                Startup.Start(SysConfig.Config.HttpPort, "多模式融合定位平台.Xml", "XdCxRhDW.Dto.xml", SysConfig.Config.TimeZoneUTC);
+                
+                Startup.Start(SysConfig.Config.HttpPort, $"{Process.GetCurrentProcess().ProcessName}.Xml", "XdCxRhDW.Dto.xml", SysConfig.Config.TimeZoneUTC);
             }
             catch (System.Reflection.TargetInvocationException ex)
             {

+ 37 - 1
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -84,7 +84,8 @@ namespace XdCxRhDW.App.UserControl
             gridView1.BestFitColumns();
             gridHomePosRes.UseDefault(new List<ModelPosRes>()).UseMultiSelect().UseRowNumber().UseNullValueText()
                 .AddRowMenu<ModelPosRes>("绘制时差线", SvgHelper.CreateDtoLine(), DrawDtoLine)
-                .AddRowMenu<ModelPosRes>("GDOP分析", SvgHelper.CreateGDOP(), DrawGdopLine)//, item => item.PosResType != EnumPosResType.RH
+                .AddRowMenu<ModelPosRes>("GDOP分析", SvgHelper.CreateGDOP(), DrawGdopLine)
+                .AddRowMenu<ModelPosRes>("误差椭圆",SvgHelper.CreateGDOP(), DraErrlipse)
                 .AddRowMenu<ModelPosRes>("查看参估", SvgHelper.CreateShowCafRes(), ShowCafRes)
                 .AddRowMenu<ModelPosRes>("查看测向", SvgHelper.CreateShowCxRes(), ShowCxRes)
                 .AddRowMenu<ModelPosRes>("查看检测", SvgHelper.CreateShowCheckRes(), ShowCheckRes)
@@ -1052,11 +1053,13 @@ namespace XdCxRhDW.App.UserControl
             {
                 switch (item.PosResType)
                 {
+                    case EnumPosResType.X2D1:
                     case EnumPosResType.X2D1NoRef:
                         X2D1GDOPParam x2D1GdopParam = new X2D1GDOPParam(item);
                         x2D1GdopParam.mapControl1 = mapControl1;
                         DxHelper.PopupHelper.ShowPopup(x2D1GdopParam, layoutControl1, 600);
                         break;
+                    case EnumPosResType.X3TwoDto: 
                     case EnumPosResType.X3TwoDtoNoRef:
                     case EnumPosResType.X3Leo:
                         X3GDOPParam x3GdopParam = new X3GDOPParam(item);
@@ -1068,6 +1071,39 @@ namespace XdCxRhDW.App.UserControl
                         x2DFGdopParam.mapControl1 = mapControl1;
                         DxHelper.PopupHelper.ShowPopup(x2DFGdopParam, layoutControl1, 600);
                         break;
+                    case EnumPosResType.X1Leo://???
+                        break;
+                    default:
+                        break;
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error($"绘制{item.PosResType.GetEnumDisplayName()}GDOP失败", ex).Wait(5000);
+                DxHelper.MsgBoxHelper.ShowWarning($"绘制{item.PosResType.GetEnumDisplayName()}GDOP失败!");
+
+            }
+        }
+        //绘制误差椭圆
+        public void DraErrlipse(ModelPosRes item)
+        {
+            try
+            {
+                switch (item.PosResType)
+                {
+                    case EnumPosResType.X2D1:
+                    case EnumPosResType.X2D1NoRef:
+                        X2D1EllipesEditor ctrl = new X2D1EllipesEditor(item,this.mapControl1);
+                        DxHelper.PopupHelper.ShowPopup(ctrl, layoutControl1, 600);
+                        break;
+                    case EnumPosResType.X3TwoDto:
+                    case EnumPosResType.X3TwoDtoNoRef:
+                    case EnumPosResType.X3Leo:
+                        break;
+                    case EnumPosResType.X2Leo:
+                        break;
+                    case EnumPosResType.X1Leo:
+                        break;
                     default:
                         break;
                 }

+ 11 - 2
XdCxRhDW.App/XdCxRhDW.App.csproj

@@ -11,7 +11,7 @@
     <OutputType>WinExe</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>XdCxRhDW.App</RootNamespace>
-    <AssemblyName>多模式融合定位平台</AssemblyName>
+    <AssemblyName>定位平台</AssemblyName>
     <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <NuGetPackageImportStamp>
@@ -42,7 +42,7 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <Prefer32Bit>false</Prefer32Bit>
-    <DocumentationFile>bin\Debug\多模式融合定位平台.xml</DocumentationFile>
+    <DocumentationFile>bin\Debug\定位平台.xml</DocumentationFile>
     <NoWarn>CS1591;CS0612</NoWarn>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
@@ -259,6 +259,12 @@
     <Compile Include="EditForms\TaskEditor.Designer.cs">
       <DependentUpon>TaskEditor.cs</DependentUpon>
     </Compile>
+    <Compile Include="EditForms\X2D1EllipesEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="EditForms\X2D1EllipesEditor.Designer.cs">
+      <DependentUpon>X2D1EllipesEditor.cs</DependentUpon>
+    </Compile>
     <Compile Include="EditForms\X2DTOParamEditor.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -495,6 +501,9 @@
     <EmbeddedResource Include="EditForms\TaskEditor.resx">
       <DependentUpon>TaskEditor.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="EditForms\X2D1EllipesEditor.resx">
+      <DependentUpon>X2D1EllipesEditor.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="EditForms\X2DTOParamEditor.resx">
       <DependentUpon>X2DTOParamEditor.cs</DependentUpon>
     </EmbeddedResource>

+ 14 - 0
XdCxRhDW.DataEmulation/Program.cs

@@ -11,6 +11,16 @@ using System.Windows.Forms;
 
 namespace XdCxRhDW.DataEmulation
 {
+    public class Father
+    {
+        public int A { get; set; }
+    }
+    public class Son : Father
+    {
+        public int B { get; set; }
+    }
+
+
     internal static class Program
     {
         static Program()
@@ -35,6 +45,10 @@ namespace XdCxRhDW.DataEmulation
         [STAThread]
         static void Main()
         {
+
+            Father f = new Father() { A = 1 };
+            Son s = (Son)f;
+
             WindowsFormsSettings.AllowDpiScale = true;
             WindowsFormsSettings.AllowHoverAnimation = DevExpress.Utils.DefaultBoolean.True;
             WindowsFormsSettings.AllowDefaultSvgImages = DevExpress.Utils.DefaultBoolean.True;

+ 16 - 2
XdCxRhDW.Entity/EntityEnum.cs

@@ -84,11 +84,25 @@ namespace XdCxRhDW.Entity
     /// </summary>
     public enum EnumPosResType
     {
+        /// <summary>
+        /// 两星一地带参定位
+        /// </summary>
+        [Display(Name = "两星一地带参定位")]
+        X2D1,
+
         /// <summary>
         /// 两星一地无参定位
         /// </summary>
         [Display(Name = "两星一地无参定位")]
         X2D1NoRef,
+
+
+        /// <summary>
+        /// 三星双时差带参定位
+        /// </summary>
+        [Display(Name = "三星双时差带参定位")]
+        X3TwoDto,
+
         /// <summary>
         /// 三星双时差无参定位
         /// </summary>
@@ -96,9 +110,9 @@ namespace XdCxRhDW.Entity
         X3TwoDtoNoRef,
 
         /// <summary>
-        /// 低轨单星定位
+        /// 低轨单星带参定位
         /// </summary>
-        [Display(Name = "低轨单星定位")]
+        [Display(Name = "低轨单星带参定位")]
         X1Leo,
 
         /// <summary>

+ 30 - 66
XdCxRhDw.Dto/ErrEllipseX2D1Dto.cs

@@ -9,57 +9,8 @@ namespace XdCxRhDW.Dto
     /// <summary>
     /// 两星一地误差椭圆参数模型
     /// </summary>
-    public class ErrEllipseX2D1Dto
+    public class ErrEllipseX2D1Dto : ErrEllipseX2D1NoRefDto
     {
-        /// <summary>
-        /// 定位经度
-        /// </summary>
-        public double PosLon { get; set; }
-
-        /// <summary>
-        /// 定位纬度
-        /// </summary>
-        public double PosLat { get; set; }
-
-        /// <summary>
-        /// 主星ECEF坐标X
-        /// </summary>
-        public double MainX { get; set; }
-
-        /// <summary>
-        /// 主星ECEF坐标Y
-        /// </summary>
-        public double MainY { get; set; }
-
-        /// <summary>
-        /// 主星ECEF坐标Z
-        /// </summary>
-        public double MainZ { get; set; }
-
-        /// <summary>
-        /// 邻星ECEF坐标X
-        /// </summary>
-        public double AdjaX { get; set; }
-
-        /// <summary>
-        /// 邻星ECEF坐标Y
-        /// </summary>
-        public double AdjaY { get; set; }
-
-        /// <summary>
-        /// 邻星ECEF坐标Z
-        /// </summary>
-        public double AdjaZ { get; set; }
-
-        /// <summary>
-        /// 超短波接收站点经度
-        /// </summary>
-        public double CdbLon { get; set; }
-
-        /// <summary>
-        /// 超短波接收站点纬度
-        /// </summary>
-        public double CdbLat { get; set; }
 
         /// <summary>
         /// 参考站经度
@@ -71,28 +22,41 @@ namespace XdCxRhDW.Dto
         /// </summary>
         public double RefLat { get; set; }
 
-
-        /// <summary>
-        /// 时差误差(us)
-        /// </summary>
-        public double DtoErrus { get; set; }
-
-        /// <summary>
-        /// 星历误差(米)
-        /// </summary>
-        public double EphErr { get; set; }
-
-        /// <summary>
-        /// 是否输出椭圆位置信息
-        /// </summary>
-        public bool OutputErrPoint { get; set; }
-
     }
     /// <summary>
     /// 两星一地无参误差椭圆参数模型
     /// </summary>
     public class ErrEllipseX2D1NoRefDto
     {
+        /// <summary>
+        /// 创建带参的参数模型
+        /// </summary>
+        /// <param name="refLon">参考站经度</param>
+        /// <param name="refLat">参考站纬度</param>
+        /// <returns></returns>
+        public ErrEllipseX2D1Dto WithRef(double refLon, double refLat)
+        {
+            return new ErrEllipseX2D1Dto()
+            {
+                RefLon = refLon,
+                RefLat = refLat,
+                AdjaX = AdjaX,
+                AdjaY = AdjaY,
+                AdjaZ = AdjaZ,
+                CdbLat = CdbLat,
+                CdbLon = CdbLon,
+                DtoErrus = DtoErrus,
+                EphErr = EphErr,
+                MainX = MainX,
+                MainY = MainY,
+                MainZ = MainZ,
+                OutputErrPoint = OutputErrPoint,
+                PosLat = PosLat,
+                PosLon = PosLon,
+            };
+
+        }
+
         /// <summary>
         /// 定位经度
         /// </summary>