wyq 1 жил өмнө
parent
commit
bfbb46efe0

+ 5 - 5
Service/X2D1NoRefTaskServer54/Service/TaskService.cs

@@ -368,7 +368,7 @@ namespace X2D1NoRefTaskServer54.Service
                                                     if (posLon != 0 && posLat != 0 && posLon != 999 && posLat != 999)
                                                     {
 #warning 误差椭圆没有提供无参算法 暂时使用有参
-                                                        var errDto = new ErrEllipseX2D1Dto()
+                                                        var errDto = new ErrEllipseX2D1Dto()//ErrEllipseX2D1NoRefDto
                                                         {
                                                             MainX = MainSatXYZ[0],
                                                             MainY = MainSatXYZ[1],
@@ -386,7 +386,8 @@ namespace X2D1NoRefTaskServer54.Service
                                                             DtoErrus = DtoErrus,
                                                             EphErr = EphErrm,
                                                         };
-                                                       var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipse2X1D", errDto);
+                                                        //ErrorEllipse2X1DNoRef
+                                                        var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipse2X1D", errDto);
                                                         errRes = errResRsp.data;
                                                     }
                                                     StringBuilder sb = new StringBuilder();
@@ -438,13 +439,11 @@ namespace X2D1NoRefTaskServer54.Service
                                     }
                                     else
                                     {
-
                                         LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估开始,共{sig.Slots.Slots.Count}个突发...");
                                         sw.Start();
                                         string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
                                         string adja1File = await HttpHelper.UploadFileAsync(ch1File.File, baseUrl, token: cts.Token);//邻1星文件
                                         string cdbFile = await HttpHelper.UploadFileAsync(ch2File.File, baseUrl, token: cts.Token);//地面信号文件
-
                                         var smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList();
                                         var cgDto = new CpuCgMultiDto()
                                         {
@@ -565,7 +564,7 @@ namespace X2D1NoRefTaskServer54.Service
                                                     if (posLon != 0 && posLat != 0 && posLon != 999 && posLat != 999)
                                                     {
 #warning 误差椭圆没有提供无参算法 暂时使用有参
-                                                        var errDto = new ErrEllipseX2D1Dto()
+                                                        var errDto = new ErrEllipseX2D1Dto()//ErrEllipseX2D1NoRefDto
                                                         {
                                                             MainX = MainSatXYZ[0],
                                                             MainY = MainSatXYZ[1],
@@ -583,6 +582,7 @@ namespace X2D1NoRefTaskServer54.Service
                                                             DtoErrus = DtoErrus,
                                                             EphErr = EphErrm,
                                                         };
+                                                        //ErrorEllipse2X1DNoRef
                                                         var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipse2X1D", errDto);
                                                         errRes = errResRsp.data;
                                                     }

+ 67 - 0
XdCxRhDW.Api/AddIns/GDOP误差椭圆/ErrEllipseHepler.cs

@@ -34,6 +34,23 @@ namespace XdCxRhDW.Api
         private 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">主星位置 长度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(ErrellipDll, EntryPoint = "Error_Ellipse_2X1D_NoRef", CallingConvention = CallingConvention.Cdecl)]
+        private extern static IntPtr Error_Ellipse_2X1D_NoRef(double[] main_eph, double[] neigh_eph, double[] cdbAnt,  double[] Select_Point, double dto_err,
+        double eph_err, double Pe, ref int LOP_Len);
+
         /// <summary>
         /// 获取误差椭圆的长轴(m)、短轴(m)、倾角(°)
         /// </summary>
@@ -85,5 +102,55 @@ namespace XdCxRhDW.Api
             }
             return res;
         }
+
+        /// <summary>
+        /// 获取误差椭圆的长轴(m)、短轴(m)、倾角(°)
+        /// </summary>
+        /// <param name="posLon"></param>
+        /// <param name="posLat"></param>
+        /// <param name="mainEph"></param>
+        /// <param name="adajEph"></param>
+        /// <param name="cdbPos"></param>
+        /// <param name="DtoErrus"></param>
+        /// <param name="EphErrm"></param>
+        /// <param name="outputErrPoint"></param>
+        /// <returns></returns>
+        public static ErrEllipseResDto ErrorEllipse2X1DNoRef(double posLon, double posLat, double[] mainEph, double[] adajEph, double[] cdbPos,  double DtoErrus, double EphErrm, bool outputErrPoint)
+        {
+            //IEnumerable<double> res = new List<double>();
+            int LOP_Len = 0;
+            double Pe = 0.5;
+            IntPtr LOP_ValuePtr = Error_Ellipse_2X1D_NoRef(
+                   mainEph,
+                   adajEph,
+                   cdbPos,
+                    new double[3] { posLon, posLat, 0 },
+                    DtoErrus * 1e-6,
+                    EphErrm,//单位m
+                    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);
+            }
+            ErrEllipseResDto res = new ErrEllipseResDto();
+            res.LongRadius = LOP_Value[LOP_Value.Length - 3];
+            res.ShortRadius = LOP_Value[LOP_Value.Length - 2];
+            res.DipAngle = LOP_Value[LOP_Value.Length - 1];
+            if (outputErrPoint)
+            {
+                int count = LOP_Value.Length - 3;
+
+                for (int i = 0; i < count; i += 2)//13 ---01 23 45 67 89
+                {
+                    res.GeoPoints.Add(new GeoPoint()
+                    {
+                        Lon = LOP_Value[i],
+                        Lat = LOP_Value[i + 1],
+                    });
+                }
+            }
+            return res;
+        }
     }
 }

BIN
XdCxRhDW.Api/AddIns/低轨/DLL_GD64.dll


+ 0 - 0
XdCxRhDW.Api/AddIns/低轨定位/DLL_LHDW.h → XdCxRhDW.Api/AddIns/低轨/DLL_LHDW.h


+ 0 - 0
XdCxRhDW.Api/AddIns/低轨定位/DLL_XDXZ.dll → XdCxRhDW.Api/AddIns/低轨/DLL_XDXZ.dll


+ 293 - 0
XdCxRhDW.Api/AddIns/低轨/ErrorEllipseHelper.cs

@@ -0,0 +1,293 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.Api
+{
+
+    public class ErrorEllipseDTFOTSOption
+    {
+        /// <summary>
+        /// 主星星历
+        /// </summary>
+        public double[] MsEph { get; set; }
+
+        /// <summary>
+        /// 邻星星历
+        /// </summary>
+        public double[] NsEph { get; set; }
+
+        /// <summary>
+        /// 参考站位置
+        /// </summary>
+        public double[] RefGeod { get; set; }
+
+        /// <summary>
+        /// 定位点
+        /// </summary>
+        public double[] SelectPoint { get; set; }
+
+        /// <summary>
+        /// 时差误差(s)
+        /// </summary>
+        public double DtoErr { 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>
+        /// 上行频点1(Hz)
+        /// </summary>
+        public double fu1 { get; set; }
+        /// <summary>
+        /// 上行频点2(Hz)
+        /// </summary>
+        public double fu2 { get; set; }
+        /// <summary>
+        /// 概率 默认0.5
+        /// </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>
+        /// 时差误差(s)
+        /// </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 ErrorEllipseHelper
+    {
+        private const string errorEllipseDll = @"Api\低轨\GDOP\DLL_GD64.dll";
+        /// <summary>
+        /// 低轨双星误差椭圆
+        /// </summary>
+        /// <param name="main_eph">主星位置 长度6</param>
+        /// <param name="neigh_eph">邻星位置 长度6</param>
+        /// <param name="ref_pos">参考位置 长度3</param>
+        /// <param name="Select_Point">定位点长度3</param>
+        /// <param name="dto_err">时差误差(s)</param>
+        /// <param name="dfo_err">频差误差(Hz)</param>
+        /// <param name="eph_pos_err"></param>
+        /// <param name="eph_vel_err"></param>
+        /// <param name="fu"></param>
+        /// <param name="Pe">0.5</param>
+        /// <param name="LOP_Len"></param>
+        /// <returns></returns>
+        [DllImport(errorEllipseDll, EntryPoint = "Error_Ellipse_DTFO", CallingConvention = CallingConvention.Cdecl)]
+        public extern static IntPtr Error_Ellipse_DTFO(double[] main_eph, double[] neigh_eph, double[] ref_pos, double[] Select_Point, double dto_err, double dfo_err,
+        double eph_pos_err, double eph_vel_err, double fu1, double fu2, 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(errorEllipseDll, 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(errorEllipseDll, 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(errorEllipseDll, CallingConvention = CallingConvention.Cdecl)]
+        public static extern void freeBuff(IntPtr buf);
+
+        public static IEnumerable<(double lon, double lat)> ErrorEllipseLeoX2(ErrorEllipseDTFOTSOption opt)
+        {
+
+            List<DtoLinePoint> list = new List<DtoLinePoint>();
+
+            int LOP_Len = 0;
+            IntPtr LOP_ValuePtr = Error_Ellipse_DTFO(
+                opt.MsEph,
+                 opt.NsEph,
+                opt.RefGeod,
+                 opt.SelectPoint,
+                opt.DtoErr,
+                opt.DfoErr,
+               opt.EphPosErr,
+               opt.EphVelErr,
+               opt.fu1, opt.fu2, opt.Pe, ref LOP_Len);
+            return ParseResult(LOP_ValuePtr, LOP_Len);
+        }
+
+
+        public static IEnumerable<(double lon, double lat)> ErrorEllipse2X1D(ErrorEllipseDTO2X1DOption opt)
+        {
+            int LOP_Len = 0;
+            IntPtr LOP_ValuePtr = Error_Ellipse_2X1D(
+                opt.MsEph,
+                 opt.NsEph,
+                 opt.CDBAnt,
+                opt.RefGeod,
+                 opt.SelectPoint,
+                opt.DtoErr,
+                opt.EphErr,
+                opt.Pe, ref LOP_Len);
+            return ParseResult(LOP_ValuePtr, LOP_Len);
+        }
+
+
+        public static IEnumerable<(double lon, double lat)> ErrorEllipseLeoX1(ErrorEllipseDTO1XOption opt)
+        {
+            int LOP_Len = 0;
+            IntPtr LOP_ValuePtr = Error_Ellipse_2DFO(
+                opt.MsEph,
+                 opt.NsEph1,
+                 opt.NsEph2,
+                 opt.SelectPoint,
+                opt.DfoErr,
+               opt.EphPosErr,
+               opt.EphVelErr,
+               opt.fu, opt.Pe, ref LOP_Len);
+            return ParseResult(LOP_ValuePtr, LOP_Len);
+        }
+
+        private static IEnumerable<(double lon, double lat)> ParseResult(IntPtr LOP_ValuePtr, int LOP_Len)
+        {
+            List<DtoLinePoint> list = new List<DtoLinePoint>();
+            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;
+        }
+
+
+    }
+}

BIN
XdCxRhDW.Api/AddIns/低轨/GDOP_Draw.dll


+ 4 - 2
XdCxRhDW.Api/AddIns/低轨定位/LeoPosApi.cs → XdCxRhDW.Api/AddIns/低轨/LeoPosApi.cs

@@ -8,12 +8,14 @@ using System.Text;
 using System.Threading.Tasks;
 using XdCxRhDW.Entity;
 
-namespace XdCxRhDW.Api.AddIns.低轨定位
+namespace XdCxRhDW.Api
 {
     public static class LeoPosApi
     {
         //低轨道单星和双星定位
-        private const string leoPos = @"AddIns\低轨定位\DLL_XDXZ.dll";
+        private const string leoPos = @"AddIns\低轨\DLL_XDXZ.dll";
+
+
         private static double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
 
 

+ 6 - 3
XdCxRhDW.Api/XdCxRhDW.Api.csproj

@@ -54,7 +54,8 @@
     <Compile Include="AddIns\GDOP误差椭圆\MapItem.cs" />
     <Compile Include="AddIns\GDOP误差椭圆\TheoryDtoDfoApi.cs" />
     <Compile Include="AddIns\GPU参估\GpuCafResult.cs" />
-    <Compile Include="AddIns\低轨定位\LeoPosApi.cs" />
+    <Compile Include="AddIns\低轨\ErrorEllipseHelper.cs" />
+    <Compile Include="AddIns\低轨\LeoPosApi.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="AddIns\定位\PosApi.cs" />
     <Compile Include="AddIns\时差线\DrawDtoLineHelper.cs" />
@@ -173,12 +174,14 @@
     <Content Include="AddIns\GDOP误差椭圆\DLL_SCXPlot.dll">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="AddIns\低轨定位\DLL_LHDW.h">
+    <Content Include="AddIns\低轨\DLL_GD64.dll" />
+    <Content Include="AddIns\低轨\DLL_LHDW.h">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="AddIns\低轨定位\DLL_XDXZ.dll">
+    <Content Include="AddIns\低轨\DLL_XDXZ.dll">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="AddIns\低轨\GDOP_Draw.dll" />
     <Content Include="AddIns\频差线\Positioning.h" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+ 9 - 7
XdCxRhDW.App/Controllers/DetectCgController.cs

@@ -158,19 +158,21 @@ namespace XdCxRhDW.App.Controllers
                 return Success(res);
             });
         }
-
         /// <summary>
         /// 两星一地误差椭圆(无参)
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        public async Task<AjaxResult<ResampleResponseDto>> ErrorEllipse2X1DNoRef(ResampleRequestDto dto)
+        public async Task<AjaxResult<ErrEllipseResDto>> ErrorEllipse2X1DNoRef(ErrEllipseX2D1NoRefDto dto)
         {
-            var svr = ServerContext.Instance.GetRandomOne(EnumSvrType.CheckSvr);
-            dto.File = await HttpHelper.UploadFileAsync(GetLocalFile(dto.File), svr.BaseHttpAddr, timeoutSeconds: dto.TimeoutSeconds);
-            var res = await HttpHelper.PostRequestAsync<ResampleResponseDto>(svr.BaseHttpAddr + "Check/Resample", dto, dto.TimeoutSeconds);
-            await HttpHelper.DownloadFileAsync(svr.BaseHttpAddr, res.data.File, GetLocalFile(res.data.File), dto.TimeoutSeconds);
-            return res;
+            return await Task.Run(() =>
+            {
+                double[] mainEcef = new double[3] { dto.MainX, dto.MainY, dto.MainZ };
+                double[] adjaEcef = new double[3] { dto.AdjaX, dto.AdjaY, dto.AdjaZ };
+                double[] cdbLoc = new double[3] { dto.CdbLon, dto.CdbLat, 0 };
+                var res = ErrEllipseHepler.ErrorEllipse2X1DNoRef(dto.PosLon, dto.PosLat, mainEcef, adjaEcef, cdbLoc, dto.DtoErrus, dto.EphErr, dto.OutputErrPoint);
+                return Success(res);
+            });
         }
     }
 }

+ 0 - 1
XdCxRhDW.App/Controllers/PosController.cs

@@ -4,7 +4,6 @@ using System.Data.Entity;
 using System.Threading.Tasks;
 using System.Web.Http;
 using XdCxRhDW.Api;
-using XdCxRhDW.Api.AddIns.低轨定位;
 using XdCxRhDW.App.Model;
 using XdCxRhDW.Dto;
 using XdCxRhDW.Entity;

+ 0 - 1
XdCxRhDW.App/EditForms/LeoX1ParamEditor.cs

@@ -6,7 +6,6 @@ using System.Data.Entity;
 using System.Drawing;
 using System.Linq;
 using XdCxRhDW.Api;
-using XdCxRhDW.Api.AddIns.低轨定位;
 using XdCxRhDW.Dto;
 using XdCxRhDW.Entity;
 using XdCxRhDW.Repostory;

+ 111 - 148
XdCxRhDW.App/UserControl/LeoX1GDOPParam.Designer.cs

@@ -49,68 +49,58 @@
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject14 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject15 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject16 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions5 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject17 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject18 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject19 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject20 = new DevExpress.Utils.SerializableAppearanceObject();
             this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
             this.ucEphXYZAdja2 = new XdCxRhDW.App.UserControl.UCEphXYZParam();
             this.ucEphXYZAdja1 = new XdCxRhDW.App.UserControl.UCEphXYZParam();
             this.ucEphXYZMain = new XdCxRhDW.App.UserControl.UCEphXYZParam();
-            this.btnOK = new DevExpress.XtraEditors.SimpleButton();
+            this.btnGDOP = new DevExpress.XtraEditors.SimpleButton();
             this.txtCapTime = new DevExpress.XtraEditors.DateEdit();
-            this.txtRefLocation1 = new DevExpress.XtraEditors.TextEdit();
             this.txtSatLocErr1 = new DevExpress.XtraEditors.ButtonEdit();
             this.txtDfoErr1 = new DevExpress.XtraEditors.ButtonEdit();
             this.txtEphVelErr1 = new DevExpress.XtraEditors.ButtonEdit();
             this.txtFu1 = new DevExpress.XtraEditors.ButtonEdit();
-            this.txtFu2 = new DevExpress.XtraEditors.ButtonEdit();
             this.btnClose = new DevExpress.XtraEditors.SimpleButton();
             this.btnEphCalc = new DevExpress.XtraEditors.SimpleButton();
+            this.btnErrEllipse = new DevExpress.XtraEditors.SimpleButton();
             this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
             this.itemSigTime = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
             this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
-            this.layoutControlItem10 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.layoutControlItem12 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.layoutControlItem14 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.emptySpaceItem2 = new DevExpress.XtraLayout.EmptySpaceItem();
             this.layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem13 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem15 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem10 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.emptySpaceItem2 = new DevExpress.XtraLayout.EmptySpaceItem();
+            this.layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
             this.dxErrorProvider = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(this.components);
             ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
             this.layoutControl1.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.txtCapTime.Properties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtCapTime.Properties.CalendarTimeProperties)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.txtRefLocation1.Properties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtSatLocErr1.Properties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtDfoErr1.Properties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtEphVelErr1.Properties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtFu1.Properties)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.txtFu2.Properties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.itemSigTime)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem10)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem6)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem7)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem12)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem14)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem13)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem15)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem10)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem8)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.dxErrorProvider)).BeginInit();
             this.SuspendLayout();
             // 
@@ -119,23 +109,22 @@
             this.layoutControl1.Controls.Add(this.ucEphXYZAdja2);
             this.layoutControl1.Controls.Add(this.ucEphXYZAdja1);
             this.layoutControl1.Controls.Add(this.ucEphXYZMain);
-            this.layoutControl1.Controls.Add(this.btnOK);
+            this.layoutControl1.Controls.Add(this.btnGDOP);
             this.layoutControl1.Controls.Add(this.txtCapTime);
-            this.layoutControl1.Controls.Add(this.txtRefLocation1);
             this.layoutControl1.Controls.Add(this.txtSatLocErr1);
             this.layoutControl1.Controls.Add(this.txtDfoErr1);
             this.layoutControl1.Controls.Add(this.txtEphVelErr1);
             this.layoutControl1.Controls.Add(this.txtFu1);
-            this.layoutControl1.Controls.Add(this.txtFu2);
             this.layoutControl1.Controls.Add(this.btnClose);
             this.layoutControl1.Controls.Add(this.btnEphCalc);
+            this.layoutControl1.Controls.Add(this.btnErrEllipse);
             this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
             this.layoutControl1.Location = new System.Drawing.Point(0, 0);
             this.layoutControl1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
             this.layoutControl1.Name = "layoutControl1";
             this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(993, 379, 650, 400);
             this.layoutControl1.Root = this.Root;
-            this.layoutControl1.Size = new System.Drawing.Size(513, 556);
+            this.layoutControl1.Size = new System.Drawing.Size(513, 502);
             this.layoutControl1.TabIndex = 0;
             this.layoutControl1.Text = "layoutControl1";
             // 
@@ -160,16 +149,16 @@
             this.ucEphXYZMain.Size = new System.Drawing.Size(509, 88);
             this.ucEphXYZMain.TabIndex = 18;
             // 
-            // btnOK
+            // btnGDOP
             // 
-            this.btnOK.Location = new System.Drawing.Point(352, 461);
-            this.btnOK.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
-            this.btnOK.Name = "btnOK";
-            this.btnOK.Size = new System.Drawing.Size(157, 22);
-            this.btnOK.StyleController = this.layoutControl1;
-            this.btnOK.TabIndex = 12;
-            this.btnOK.Text = "确定";
-            this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+            this.btnGDOP.Location = new System.Drawing.Point(259, 417);
+            this.btnGDOP.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.btnGDOP.Name = "btnGDOP";
+            this.btnGDOP.Size = new System.Drawing.Size(120, 22);
+            this.btnGDOP.StyleController = this.layoutControl1;
+            this.btnGDOP.TabIndex = 12;
+            this.btnGDOP.Text = "GDOP分析";
+            this.btnGDOP.Click += new System.EventHandler(this.btnOK_Click);
             // 
             // txtCapTime
             // 
@@ -188,20 +177,6 @@
             this.txtCapTime.StyleController = this.layoutControl1;
             this.txtCapTime.TabIndex = 8;
             // 
-            // txtRefLocation1
-            // 
-            this.txtRefLocation1.EditValue = "";
-            this.txtRefLocation1.Location = new System.Drawing.Point(4, 339);
-            this.txtRefLocation1.Margin = new System.Windows.Forms.Padding(2);
-            this.txtRefLocation1.MaximumSize = new System.Drawing.Size(0, 23);
-            this.txtRefLocation1.MinimumSize = new System.Drawing.Size(0, 23);
-            this.txtRefLocation1.Name = "txtRefLocation1";
-            this.txtRefLocation1.Properties.AutoHeight = false;
-            this.txtRefLocation1.Size = new System.Drawing.Size(259, 23);
-            this.txtRefLocation1.StyleController = this.layoutControl1;
-            this.txtRefLocation1.TabIndex = 10;
-            this.txtRefLocation1.ToolTip = "经度纬度之间用英文逗号隔开";
-            // 
             // txtSatLocErr1
             // 
             this.txtSatLocErr1.EditValue = "";
@@ -213,64 +188,53 @@
             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(259, 23);
+            this.txtSatLocErr1.Size = new System.Drawing.Size(251, 23);
             this.txtSatLocErr1.StyleController = this.layoutControl1;
             this.txtSatLocErr1.TabIndex = 6;
             // 
             // txtDfoErr1
             // 
-            this.txtDfoErr1.Location = new System.Drawing.Point(267, 339);
+            this.txtDfoErr1.Location = new System.Drawing.Point(2, 339);
             this.txtDfoErr1.Margin = new System.Windows.Forms.Padding(2);
             this.txtDfoErr1.MaximumSize = new System.Drawing.Size(0, 23);
             this.txtDfoErr1.MinimumSize = new System.Drawing.Size(0, 23);
             this.txtDfoErr1.Name = "txtDfoErr1";
             this.txtDfoErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
             new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "Hz", -1, false, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
-            this.txtDfoErr1.Size = new System.Drawing.Size(242, 23);
+            this.txtDfoErr1.Size = new System.Drawing.Size(251, 23);
             this.txtDfoErr1.StyleController = this.layoutControl1;
             this.txtDfoErr1.TabIndex = 13;
             // 
             // txtEphVelErr1
             // 
-            this.txtEphVelErr1.Location = new System.Drawing.Point(267, 383);
+            this.txtEphVelErr1.Location = new System.Drawing.Point(259, 383);
             this.txtEphVelErr1.Margin = new System.Windows.Forms.Padding(2);
             this.txtEphVelErr1.MaximumSize = new System.Drawing.Size(0, 23);
             this.txtEphVelErr1.MinimumSize = new System.Drawing.Size(0, 23);
             this.txtEphVelErr1.Name = "txtEphVelErr1";
             this.txtEphVelErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
             new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "m/s", -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.txtEphVelErr1.Size = new System.Drawing.Size(242, 23);
+            this.txtEphVelErr1.Size = new System.Drawing.Size(250, 23);
             this.txtEphVelErr1.StyleController = this.layoutControl1;
             this.txtEphVelErr1.TabIndex = 14;
             // 
             // txtFu1
             // 
-            this.txtFu1.Location = new System.Drawing.Point(4, 427);
+            this.txtFu1.Location = new System.Drawing.Point(261, 339);
             this.txtFu1.Margin = new System.Windows.Forms.Padding(2);
             this.txtFu1.Name = "txtFu1";
             this.txtFu1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
             new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "MHz", -1, false, true, false, editorButtonImageOptions4, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject13, serializableAppearanceObject14, serializableAppearanceObject15, serializableAppearanceObject16, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
-            this.txtFu1.Size = new System.Drawing.Size(259, 23);
+            this.txtFu1.Size = new System.Drawing.Size(250, 23);
             this.txtFu1.StyleController = this.layoutControl1;
             this.txtFu1.TabIndex = 15;
             // 
-            // txtFu2
-            // 
-            this.txtFu2.Location = new System.Drawing.Point(267, 427);
-            this.txtFu2.Margin = new System.Windows.Forms.Padding(2);
-            this.txtFu2.Name = "txtFu2";
-            this.txtFu2.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "MHz", -1, false, true, false, editorButtonImageOptions5, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject17, serializableAppearanceObject18, serializableAppearanceObject19, serializableAppearanceObject20, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
-            this.txtFu2.Size = new System.Drawing.Size(242, 23);
-            this.txtFu2.StyleController = this.layoutControl1;
-            this.txtFu2.TabIndex = 16;
-            // 
             // btnClose
             // 
-            this.btnClose.Location = new System.Drawing.Point(186, 461);
+            this.btnClose.Location = new System.Drawing.Point(128, 417);
             this.btnClose.Margin = new System.Windows.Forms.Padding(2);
             this.btnClose.Name = "btnClose";
-            this.btnClose.Size = new System.Drawing.Size(162, 22);
+            this.btnClose.Size = new System.Drawing.Size(127, 22);
             this.btnClose.StyleController = this.layoutControl1;
             this.btnClose.TabIndex = 17;
             this.btnClose.Text = "关闭";
@@ -278,15 +242,26 @@
             // 
             // btnEphCalc
             // 
-            this.btnEphCalc.Location = new System.Drawing.Point(4, 461);
+            this.btnEphCalc.Location = new System.Drawing.Point(4, 417);
             this.btnEphCalc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
             this.btnEphCalc.Name = "btnEphCalc";
-            this.btnEphCalc.Size = new System.Drawing.Size(178, 22);
+            this.btnEphCalc.Size = new System.Drawing.Size(120, 22);
             this.btnEphCalc.StyleController = this.layoutControl1;
             this.btnEphCalc.TabIndex = 12;
             this.btnEphCalc.Text = "星历推算";
             this.btnEphCalc.Click += new System.EventHandler(this.btnEphCalc_Click);
             // 
+            // btnErrEllipse
+            // 
+            this.btnErrEllipse.Location = new System.Drawing.Point(385, 417);
+            this.btnErrEllipse.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.btnErrEllipse.Name = "btnErrEllipse";
+            this.btnErrEllipse.Size = new System.Drawing.Size(124, 22);
+            this.btnErrEllipse.StyleController = this.layoutControl1;
+            this.btnErrEllipse.TabIndex = 12;
+            this.btnErrEllipse.Text = "误差椭圆";
+            this.btnErrEllipse.Click += new System.EventHandler(this.btnErrEllipse_Click);
+            // 
             // Root
             // 
             this.Root.GroupBordersVisible = false;
@@ -294,20 +269,19 @@
             this.itemSigTime,
             this.layoutControlItem5,
             this.emptySpaceItem1,
-            this.layoutControlItem10,
             this.layoutControlItem6,
             this.layoutControlItem7,
-            this.layoutControlItem12,
-            this.layoutControlItem14,
-            this.emptySpaceItem2,
             this.layoutControlItem4,
             this.layoutControlItem13,
             this.layoutControlItem15,
             this.layoutControlItem3,
             this.layoutControlItem1,
-            this.layoutControlItem2});
+            this.layoutControlItem2,
+            this.layoutControlItem10,
+            this.emptySpaceItem2,
+            this.layoutControlItem8});
             this.Root.Name = "Root";
-            this.Root.Size = new System.Drawing.Size(513, 556);
+            this.Root.Size = new System.Drawing.Size(513, 502);
             this.Root.TextVisible = false;
             // 
             // itemSigTime
@@ -329,7 +303,7 @@
             this.layoutControlItem5.CustomizationFormText = "低轨卫星X";
             this.layoutControlItem5.Location = new System.Drawing.Point(0, 364);
             this.layoutControlItem5.Name = "layoutControlItem5";
-            this.layoutControlItem5.Size = new System.Drawing.Size(265, 44);
+            this.layoutControlItem5.Size = new System.Drawing.Size(257, 44);
             this.layoutControlItem5.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 0, 0, 0);
             this.layoutControlItem5.Text = "星历位置误差";
             this.layoutControlItem5.TextLocation = DevExpress.Utils.Locations.Top;
@@ -338,29 +312,17 @@
             // emptySpaceItem1
             // 
             this.emptySpaceItem1.AllowHotTrack = false;
-            this.emptySpaceItem1.Location = new System.Drawing.Point(0, 485);
+            this.emptySpaceItem1.Location = new System.Drawing.Point(0, 441);
             this.emptySpaceItem1.Name = "emptySpaceItem1";
-            this.emptySpaceItem1.Size = new System.Drawing.Size(513, 47);
+            this.emptySpaceItem1.Size = new System.Drawing.Size(513, 37);
             this.emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0);
             // 
-            // layoutControlItem10
-            // 
-            this.layoutControlItem10.Control = this.txtFu1;
-            this.layoutControlItem10.CustomizationFormText = "目标上行频点";
-            this.layoutControlItem10.Location = new System.Drawing.Point(0, 408);
-            this.layoutControlItem10.Name = "layoutControlItem10";
-            this.layoutControlItem10.Size = new System.Drawing.Size(265, 44);
-            this.layoutControlItem10.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 0, 0, 0);
-            this.layoutControlItem10.Text = "目标上行频点";
-            this.layoutControlItem10.TextLocation = DevExpress.Utils.Locations.Top;
-            this.layoutControlItem10.TextSize = new System.Drawing.Size(72, 14);
-            // 
             // layoutControlItem6
             // 
             this.layoutControlItem6.Control = this.txtDfoErr1;
-            this.layoutControlItem6.Location = new System.Drawing.Point(265, 320);
+            this.layoutControlItem6.Location = new System.Drawing.Point(0, 320);
             this.layoutControlItem6.Name = "layoutControlItem6";
-            this.layoutControlItem6.Size = new System.Drawing.Size(248, 44);
+            this.layoutControlItem6.Size = new System.Drawing.Size(257, 44);
             this.layoutControlItem6.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 2, 0, 0);
             this.layoutControlItem6.Text = "频差误差";
             this.layoutControlItem6.TextLocation = DevExpress.Utils.Locations.Top;
@@ -369,49 +331,14 @@
             // layoutControlItem7
             // 
             this.layoutControlItem7.Control = this.txtEphVelErr1;
-            this.layoutControlItem7.Location = new System.Drawing.Point(265, 364);
+            this.layoutControlItem7.Location = new System.Drawing.Point(257, 364);
             this.layoutControlItem7.Name = "layoutControlItem7";
-            this.layoutControlItem7.Size = new System.Drawing.Size(248, 44);
+            this.layoutControlItem7.Size = new System.Drawing.Size(256, 44);
             this.layoutControlItem7.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 2, 0, 0);
             this.layoutControlItem7.Text = "星历速度误差";
             this.layoutControlItem7.TextLocation = DevExpress.Utils.Locations.Top;
             this.layoutControlItem7.TextSize = new System.Drawing.Size(72, 14);
             // 
-            // layoutControlItem12
-            // 
-            this.layoutControlItem12.Control = this.txtFu2;
-            this.layoutControlItem12.CustomizationFormText = "参考上行频点";
-            this.layoutControlItem12.Location = new System.Drawing.Point(265, 408);
-            this.layoutControlItem12.Name = "layoutControlItem12";
-            this.layoutControlItem12.Size = new System.Drawing.Size(248, 44);
-            this.layoutControlItem12.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 2, 0, 0);
-            this.layoutControlItem12.Text = "参考上行频点";
-            this.layoutControlItem12.TextLocation = DevExpress.Utils.Locations.Top;
-            this.layoutControlItem12.TextSize = new System.Drawing.Size(72, 14);
-            // 
-            // layoutControlItem14
-            // 
-            this.layoutControlItem14.Control = this.txtRefLocation1;
-            this.layoutControlItem14.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
-            this.layoutControlItem14.Location = new System.Drawing.Point(0, 320);
-            this.layoutControlItem14.Name = "layoutControlItem14";
-            this.layoutControlItem14.Size = new System.Drawing.Size(265, 44);
-            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);
-            // 
-            // emptySpaceItem2
-            // 
-            this.emptySpaceItem2.AllowHotTrack = false;
-            this.emptySpaceItem2.Location = new System.Drawing.Point(0, 532);
-            this.emptySpaceItem2.MaxSize = new System.Drawing.Size(0, 24);
-            this.emptySpaceItem2.MinSize = new System.Drawing.Size(104, 24);
-            this.emptySpaceItem2.Name = "emptySpaceItem2";
-            this.emptySpaceItem2.Size = new System.Drawing.Size(513, 24);
-            this.emptySpaceItem2.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
-            this.emptySpaceItem2.TextSize = new System.Drawing.Size(0, 0);
-            // 
             // layoutControlItem4
             // 
             this.layoutControlItem4.Control = this.ucEphXYZMain;
@@ -453,10 +380,10 @@
             this.layoutControlItem3.Control = this.btnEphCalc;
             this.layoutControlItem3.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
             this.layoutControlItem3.CustomizationFormText = "layoutControlItem1";
-            this.layoutControlItem3.Location = new System.Drawing.Point(0, 452);
+            this.layoutControlItem3.Location = new System.Drawing.Point(0, 408);
             this.layoutControlItem3.Name = "layoutControlItem3";
             this.layoutControlItem3.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
-            this.layoutControlItem3.Size = new System.Drawing.Size(184, 33);
+            this.layoutControlItem3.Size = new System.Drawing.Size(126, 33);
             this.layoutControlItem3.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 0, 0, 0);
             this.layoutControlItem3.Text = "layoutControlItem1";
             this.layoutControlItem3.TextSize = new System.Drawing.Size(0, 0);
@@ -464,11 +391,13 @@
             // 
             // layoutControlItem1
             // 
-            this.layoutControlItem1.Control = this.btnOK;
-            this.layoutControlItem1.Location = new System.Drawing.Point(350, 452);
+            this.layoutControlItem1.Control = this.btnGDOP;
+            this.layoutControlItem1.Location = new System.Drawing.Point(257, 408);
+            this.layoutControlItem1.MinSize = new System.Drawing.Size(37, 33);
             this.layoutControlItem1.Name = "layoutControlItem1";
             this.layoutControlItem1.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
-            this.layoutControlItem1.Size = new System.Drawing.Size(163, 33);
+            this.layoutControlItem1.Size = new System.Drawing.Size(126, 33);
+            this.layoutControlItem1.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             this.layoutControlItem1.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 2, 0, 0);
             this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
             this.layoutControlItem1.TextVisible = false;
@@ -476,51 +405,87 @@
             // layoutControlItem2
             // 
             this.layoutControlItem2.Control = this.btnClose;
-            this.layoutControlItem2.Location = new System.Drawing.Point(184, 452);
+            this.layoutControlItem2.Location = new System.Drawing.Point(126, 408);
             this.layoutControlItem2.Name = "layoutControlItem2";
             this.layoutControlItem2.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
-            this.layoutControlItem2.Size = new System.Drawing.Size(166, 33);
+            this.layoutControlItem2.Size = new System.Drawing.Size(131, 33);
             this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
             this.layoutControlItem2.TextVisible = false;
             // 
+            // layoutControlItem10
+            // 
+            this.layoutControlItem10.Control = this.txtFu1;
+            this.layoutControlItem10.CustomizationFormText = "目标上行频点";
+            this.layoutControlItem10.Location = new System.Drawing.Point(257, 320);
+            this.layoutControlItem10.Name = "layoutControlItem10";
+            this.layoutControlItem10.Size = new System.Drawing.Size(256, 44);
+            this.layoutControlItem10.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 0, 0, 0);
+            this.layoutControlItem10.Text = "目标上行频点";
+            this.layoutControlItem10.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem10.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // emptySpaceItem2
+            // 
+            this.emptySpaceItem2.AllowHotTrack = false;
+            this.emptySpaceItem2.Location = new System.Drawing.Point(0, 478);
+            this.emptySpaceItem2.MaxSize = new System.Drawing.Size(0, 24);
+            this.emptySpaceItem2.MinSize = new System.Drawing.Size(104, 24);
+            this.emptySpaceItem2.Name = "emptySpaceItem2";
+            this.emptySpaceItem2.Size = new System.Drawing.Size(513, 24);
+            this.emptySpaceItem2.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.emptySpaceItem2.TextSize = new System.Drawing.Size(0, 0);
+            // 
+            // layoutControlItem8
+            // 
+            this.layoutControlItem8.Control = this.btnErrEllipse;
+            this.layoutControlItem8.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem8.CustomizationFormText = "layoutControlItem1";
+            this.layoutControlItem8.Location = new System.Drawing.Point(383, 408);
+            this.layoutControlItem8.MinSize = new System.Drawing.Size(37, 33);
+            this.layoutControlItem8.Name = "layoutControlItem8";
+            this.layoutControlItem8.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
+            this.layoutControlItem8.Size = new System.Drawing.Size(130, 33);
+            this.layoutControlItem8.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem8.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 2, 0, 0);
+            this.layoutControlItem8.Text = "layoutControlItem1";
+            this.layoutControlItem8.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem8.TextVisible = false;
+            // 
             // dxErrorProvider
             // 
             this.dxErrorProvider.ContainerControl = this;
             // 
-            // X3DFGDOPParam
+            // LeoX1GDOPParam
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.Controls.Add(this.layoutControl1);
             this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
-            this.Name = "X3DFGDOPParam";
-            this.Size = new System.Drawing.Size(513, 556);
+            this.Name = "LeoX1GDOPParam";
+            this.Size = new System.Drawing.Size(513, 502);
             ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
             this.layoutControl1.ResumeLayout(false);
             ((System.ComponentModel.ISupportInitialize)(this.txtCapTime.Properties.CalendarTimeProperties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtCapTime.Properties)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.txtRefLocation1.Properties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtSatLocErr1.Properties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtDfoErr1.Properties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtEphVelErr1.Properties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtFu1.Properties)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.txtFu2.Properties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.itemSigTime)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem10)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem6)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem7)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem12)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem14)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem13)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem15)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem10)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem8)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.dxErrorProvider)).EndInit();
             this.ResumeLayout(false);
 
@@ -529,13 +494,11 @@
         #endregion
         private DevExpress.XtraLayout.LayoutControl layoutControl1;
         private DevExpress.XtraEditors.DateEdit txtCapTime;
-        private DevExpress.XtraEditors.TextEdit txtRefLocation1;
         private DevExpress.XtraEditors.ButtonEdit txtSatLocErr1;
         private DevExpress.XtraLayout.LayoutControlGroup Root;
         private DevExpress.XtraLayout.LayoutControlItem itemSigTime;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem14;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
-        private DevExpress.XtraEditors.SimpleButton btnOK;
+        private DevExpress.XtraEditors.SimpleButton btnGDOP;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
         private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
         private DevExpress.XtraEditors.ButtonEdit txtDfoErr1;
@@ -543,9 +506,7 @@
         private DevExpress.XtraEditors.ButtonEdit txtEphVelErr1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
         private DevExpress.XtraEditors.ButtonEdit txtFu1;
-        private DevExpress.XtraEditors.ButtonEdit txtFu2;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem10;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem12;
         private DevExpress.XtraEditors.SimpleButton btnClose;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
         private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem2;
@@ -558,5 +519,7 @@
         private DevExpress.XtraEditors.SimpleButton btnEphCalc;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
         private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider;
+        private DevExpress.XtraEditors.SimpleButton btnErrEllipse;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
     }
 }

+ 24 - 61
XdCxRhDW.App/UserControl/LeoX1GDOPParam.cs

@@ -23,12 +23,10 @@ namespace XdCxRhDW.App.UserControl
             EphAdja1 = ucEphXYZAdja1.EphParam(),
             EphAdja2 = ucEphXYZAdja2.EphParam(),
             CapTime = txtCapTime.DateTime,
-            RefStation = txtRefLocation1.GetLonLat(),
             DfoErr = Convert.ToDouble(txtDfoErr1.Text),
             SatLocErr = Convert.ToDouble(txtSatLocErr1.Text),
             EphVelErr = Convert.ToDouble(txtEphVelErr1.Text),
             fu1 = Convert.ToDouble(txtFu1.Text) * 1e6,
-            fu2 = Convert.ToDouble(txtFu2.Text) * 1e6,
         };
         private EnumPosResType PosResType;
         public LeoX1GDOPParam(PosRes item)
@@ -36,7 +34,6 @@ namespace XdCxRhDW.App.UserControl
             InitializeComponent();
             this.layoutControl1.UseDefault();
             txtCapTime.UseDefault();
-            txtRefLocation1.UseDoubleClickToSelectAll();
             this.txtCapTime.DateTime = item.SigTime;
             this.txtSatLocErr1.EditValue = 10000;
             this.txtEphVelErr1.EditValue = 0.1;
@@ -46,14 +43,10 @@ namespace XdCxRhDW.App.UserControl
             {
                 var cg = db?.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefault();
                 var station = db?.StationRes.Where(m => m.ID == item.StationResID).FirstOrDefault();
-                if (station != null)
-                {
-                    this.txtRefLocation1.Text = $"{station.RefLon},{station.RefLat}";
-                }
+
                 if (cg != null)
                 {
                     this.txtFu1.EditValue = cg.TarFreqUp.HasValue ? cg.TarFreqUp.Value * 1e-6 : 0;
-                    this.txtFu2.EditValue = cg.RefFreqUp.HasValue ? cg.RefFreqUp.Value * 1e-6 : 0;
 
                     var mainEph = (cg.MainX, cg.MainY, cg.MainZ, cg.MainVx, cg.MainVy, cg.MainVz);
                     ucEphXYZMain.SetParam($"主星", cg.MainCode, mainEph, Color.Black);
@@ -81,10 +74,7 @@ namespace XdCxRhDW.App.UserControl
             {
                 return false;
             }
-            if (!txtRefLocation1.CheckLonLat(dxErrorProvider, "参考站"))
-            {
-                return false;
-            }
+
             if (!txtDfoErr1.CheckDouble(dxErrorProvider, "频差误差"))
             {
                 return false;
@@ -101,10 +91,7 @@ namespace XdCxRhDW.App.UserControl
             {
                 return false;
             }
-            if (!txtFu2.CheckDouble(dxErrorProvider, "参考上行频点"))
-            {
-                return false;
-            }
+
             return true;
         }
         private void btnOK_Click(object sender, EventArgs e)
@@ -112,43 +99,21 @@ namespace XdCxRhDW.App.UserControl
             if (!ParamValidate()) { return; }
             try
             {
-                mapControl1.ClearMap();
-                string useNewGDOP = ConfigurationManager.AppSettings["UseNewGDOP"];
-                if (useNewGDOP == null || useNewGDOP == "0")
-                {
-                    var data = GdopHelper.Gdop3SatDFByXyz(Model.EphMain, Model.EphAdja1, Model.EphAdja2, Model.fu1, Model.fu2, Model.DfoErr, Model.SatLocErr, Model.EphVelErr, Model.RefStation);
-                    if (data.Count == 0)
-                    {
-                        DxHelper.MsgBoxHelper.ShowInfo($"绘制{PosResType.GetEnumDisplayName()}GDOP没有{GdopParam.误差配置.误差距离km.Max()}公里以内的误差!");
-                        return;
-                    }
-                    foreach (var errLins in data)//画GDOP
-                    {
-                        var mapDots = errLins.MapDots;
-                        mapControl1.DrawGdopLineTwo(errLins.ErrDistanceKm, mapDots, mapDots.Count() / 2);
-                    }
-                }
-                else
-                {
-                    var data = GdopHelper.Gdop3SatDFByXyzNew(Model.EphMain, Model.EphAdja1, Model.EphAdja2, Model.fu1, Model.fu2, Model.DfoErr, Model.SatLocErr, Model.EphVelErr, Model.RefStation);
-                    if (data.Count == 0)
-                    {
-                        DxHelper.MsgBoxHelper.ShowInfo($"绘制{PosResType.GetEnumDisplayName()}GDOP没有{GdopParam.误差配置.误差距离km.Max()}公里以内的误差!");
-                        return;
-                    }
-                    List<MapPolyline> polylines = new List<MapPolyline>();
-                    for (int i = 0; i < data.Count; i++)
-                    {
-                        var errLins = data[i];
-                        var mapline = mapControl1.GetLine(errLins.ErrDistanceKm, errLins.MapDots);
-                        if (mapline == null)
-                        {
-                            continue;
-                        }
-                        polylines.Add(mapline);
-                    }
-                    mapControl1.DrawDtoLine(polylines);
-                }
+                //mapControl1.ClearMap();
+
+                //var data = GdopHelper.Gdop3SatDFByXyz(Model.EphMain, Model.EphAdja1, Model.EphAdja2, Model.fu1, Model.fu2, Model.DfoErr, Model.SatLocErr, Model.EphVelErr, Model.RefStation);
+                //if (data.Count == 0)
+                //{
+                //    DxHelper.MsgBoxHelper.ShowInfo($"绘制{PosResType.GetEnumDisplayName()}GDOP没有{GdopParam.误差配置.误差距离km.Max()}公里以内的误差!");
+                //    return;
+                //}
+                //foreach (var errLins in data)//画GDOP
+                //{
+                //    var mapDots = errLins.MapDots;
+                //    mapControl1.DrawGdopLineTwo(errLins.ErrDistanceKm, mapDots, mapDots.Count() / 2);
+                //}
+
+
             }
             catch (Exception ex)
             {
@@ -211,6 +176,11 @@ namespace XdCxRhDW.App.UserControl
                 DxHelper.MsgBoxHelper.ShowError($"手动推算{PosResType.GetEnumDisplayName()}星历失败,{ex.Message}");
             }
         }
+
+        private void btnErrEllipse_Click(object sender, EventArgs e)
+        {
+
+        }
     }
     public class LeoX1GDOP接口
     {
@@ -234,10 +204,7 @@ namespace XdCxRhDW.App.UserControl
         /// </summary>
         public DateTime CapTime { get; set; }
 
-        /// <summary>
-        /// 参考站位置-经度 纬度 高度
-        /// </summary>
-        public double[] RefStation { get; set; }
+
 
         /// <summary>
         /// 频差误差(Hz)
@@ -259,10 +226,6 @@ namespace XdCxRhDW.App.UserControl
         /// </summary>
         public double fu1 { get; set; }
 
-        /// <summary>
-        /// 上行频点2(Hz)
-        /// </summary>
-        public double fu2 { get; set; }
 
     }
 }

+ 71 - 0
XdCxRhDw.Dto/ErrEllipseX2D1Dto.cs

@@ -72,6 +72,77 @@ namespace XdCxRhDW.Dto
         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>
+        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>
         /// 时差误差(us)
         /// </summary>