zoulei 1 year ago
parent
commit
600c47a32c

+ 1 - 1
Service/X1LeoTaskServer54/Service/TaskService.cs

@@ -288,7 +288,7 @@ namespace X1LeoTaskServer54.Service
                                                 sb.Append($"{data1.Count:D2}\t");//时隙属性
                                                 sb.Append($"{1}\t");//所属卫星
                                                 sb.Append($"{100:D3}\t");//置信度
-                                                sb.Append($"{4}\t");//定位体制(星地=3)
+                                                sb.Append($"{4}\t");//定位体制(0未知,1高轨多星,2高低轨,3星地,4星座)
                                                 sb.Append($"{(long)deteResp.data[i].ModRate.Value:D12}");//符号速率bps  12个
                                                 sb.Append("\r\n");
                                                 string resFile = Path.Combine(PosResDir, $"低轨单星定位结果_{posRes.SigTime:yyyyMMdd}.txt");

+ 2 - 2
Service/X2LeoTaskServer54/Service/TaskService.cs

@@ -252,7 +252,7 @@ namespace X2LeoTaskServer54.Service
                                                     NsEph = Adja1XYZ,
                                                     RefGeod = new double[3] { dto.RefLon, dto.RefLat, 0 },
                                                     SelectPoint = new double[3] { posLon, posLat, 0 },
-                                                    DtoErr = DtoErrus * 1e-6,
+                                                    DtoErrUs = DtoErrus,
                                                     DfoErr = DfoErrHz,
                                                     EphPosErr = EphPosErrM,
                                                     EphVelErr = EphVelErr,
@@ -294,7 +294,7 @@ namespace X2LeoTaskServer54.Service
                                                 sb.Append($"{data1.Count:D2}\t");//时隙属性
                                                 sb.Append($"{1}\t");//所属卫星
                                                 sb.Append($"{100:D3}\t");//置信度
-                                                sb.Append($"{4}\t");//定位体制(星地=3)
+                                                sb.Append($"{4}\t");//定位体制(0未知,1高轨多星,2高低轨,3星地,4星座)
                                                 sb.Append($"{(long)deteResp.data[i].ModRate.Value:D12}");//符号速率bps  12个
                                                 sb.Append("\r\n");
                                                 string resFile = Path.Combine(PosResDir, $"低轨双星定位结果_{posRes.SigTime:yyyyMMdd}.txt");

+ 1 - 1
Service/X3LeoTaskServer54/Service/TaskService.cs

@@ -305,7 +305,7 @@ namespace X3LeoTaskServer54.Service
                                             sb.Append($"{data1.Count:D2}\t");//时隙属性
                                             sb.Append($"{1}\t");//所属卫星
                                             sb.Append($"{100:D3}\t");//置信度
-                                            sb.Append($"{4}\t");//定位体制(星地=3)
+                                            sb.Append($"{4}\t");//定位体制(0未知,1高轨多星,2高低轨,3星地,4星座)
                                             sb.Append($"{(long)deteResp.data[i].ModRate.Value:D12}");//符号速率bps  12个
                                             sb.Append("\r\n");
                                             string resFile = Path.Combine(PosResDir, $"低轨单星定位结果_{posRes.SigTime:yyyyMMdd}.txt");

+ 82 - 6
XdCxRhDW.Api/AddIns/GDOP误差椭圆/ErrEllipseHepler.cs

@@ -1,6 +1,7 @@
 using DPP_YH_Core.Extensions;
 using System;
 using System.Collections.Generic;
+using System.Data;
 using System.Linq;
 using System.Runtime.InteropServices;
 using System.Text;
@@ -51,13 +52,32 @@ namespace XdCxRhDW.Api
         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>
+        /// 三星带参误差椭圆(高轨和低轨是一样的)
+        /// </summary>
+        /// <param name="main_eph">主星位置 长度3</param>
+        /// <param name="neigh_eph1">邻星1位置 长度3</param>
+        /// <param name="neigh_eph2">邻星2位置 长度3</param>
+        /// <param name="RefGeod">参考站 长度3</param>
+        /// <param name="refStation">参考站 长度3</param>
+        /// <param name="Select_Point">定位点 长度3</param>
+        /// <param name="dto_err">时差误差(s)</param>
+        /// <param name="eph_err">星历误差(m)</param>
+        /// <param name="Pe">0.5</param>
+        /// <param name="LOP_Len"></param>
+        /// <returns></returns>
+        [DllImport(ErrellipDll, EntryPoint = "Error_Ellipse_3X_2DTO", CallingConvention = CallingConvention.Cdecl)]
+        private extern static IntPtr Error_Ellipse_3X_2DTO(double[] main_eph, double[] neigh_eph1, double[] neigh_eph2, double[] RefGeod, double[] Select_Point, double dto_err,
+        double eph_err, double Pe, ref int LOP_Len);
+
         /// <summary>
         /// 两星一地带参误差椭圆
         /// </summary>
         /// <param name="posLon">定位点经度</param>
         /// <param name="posLat">定位点纬度</param>
         /// <param name="mainEph">主星xyz,长度=3</param>
-        /// <param name="adajEph">邻星xyz,长度=3</param>
+        /// <param name="adjaEph">邻星xyz,长度=3</param>
         /// <param name="cdbPos">超短波位置(长度=2或3)</param>
         /// <param name="RefGeod">参考站位置(长度=2或3)</param>
         /// <param name="DtoErrus">时差误差(us)</param>
@@ -65,7 +85,7 @@ namespace XdCxRhDW.Api
         /// <param name="outputErrPoint">是否输出椭圆Geo点</param>
         /// <param name="pe">概率(范围0-1,默认0.5)</param>
         /// <returns></returns>
-        public static ErrEllipseResDto ErrorEllipse2X1D(double posLon, double posLat, double[] mainEph, double[] adajEph, double[] cdbPos, double[] RefGeod, double DtoErrus, double EphErrm, bool outputErrPoint, double pe = 0.5)
+        public static ErrEllipseResDto ErrorEllipse2X1D(double posLon, double posLat, double[] mainEph, double[] adjaEph, double[] cdbPos, double[] RefGeod, double DtoErrus, double EphErrm, bool outputErrPoint, double pe = 0.5)
         {
             if (cdbPos.Length == 2)
             {
@@ -78,7 +98,7 @@ namespace XdCxRhDW.Api
             int LOP_Len = 0;
             IntPtr LOP_ValuePtr = Error_Ellipse_2X1D(
                    mainEph,
-                   adajEph,
+                   adjaEph,
                    cdbPos,
                    RefGeod,
                     new double[3] { posLon, posLat, 0 },
@@ -116,14 +136,14 @@ namespace XdCxRhDW.Api
         /// <param name="posLon">定位点经度</param>
         /// <param name="posLat">定位点纬度</param>
         /// <param name="mainEph">主星xyz,长度=3</param>
-        /// <param name="adajEph">邻星xyz,长度=3</param>
+        /// <param name="adjaEph">邻星xyz,长度=3</param>
         /// <param name="cdbPos">超短波位置(长度=2或3)</param>
         /// <param name="DtoErrus">时差误差(us)</param>
         /// <param name="EphErrm">星历误差(m)</param>
         /// <param name="outputErrPoint">是否输出椭圆Geo点</param>
         /// <param name="pe">概率(范围0-1,默认0.5)</param>
         /// <returns></returns>
-        public static ErrEllipseResDto ErrorEllipse2X1DNoRef(double posLon, double posLat, double[] mainEph, double[] adajEph, double[] cdbPos, double DtoErrus, double EphErrm, bool outputErrPoint,double pe = 0.5)
+        public static ErrEllipseResDto ErrorEllipse2X1DNoRef(double posLon, double posLat, double[] mainEph, double[] adjaEph, double[] cdbPos, double DtoErrus, double EphErrm, bool outputErrPoint, double pe = 0.5)
         {
             if (cdbPos.Length == 2)
             {
@@ -133,7 +153,7 @@ namespace XdCxRhDW.Api
             double Pe = 0.5;
             IntPtr LOP_ValuePtr = Error_Ellipse_2X1D_NoRef(
                    mainEph,
-                   adajEph,
+                   adjaEph,
                    cdbPos,
                     new double[3] { posLon, posLat, 0 },
                     DtoErrus * 1e-6,
@@ -165,5 +185,61 @@ namespace XdCxRhDW.Api
         }
 
 
+
+        /// <summary>
+        /// 三星双时差带参误差椭圆(高轨和低轨是一样的)
+        /// </summary>
+        /// <param name="posLon">定位点经度</param>
+        /// <param name="posLat">定位点纬度</param>
+        /// <param name="mainEph">主星xyz,长度=3</param>
+        /// <param name="adja1Eph">邻1星xyz,长度=3</param>
+        /// <param name="adja2Eph">邻2星xyz,长度=3</param>
+        /// <param name="RefGeod">参考站位置(长度=2或3)</param>
+        /// <param name="dtoErrus">时差误差(us)</param>
+        /// <param name="ephErrm">星历误差(m)</param>
+        /// <param name="outputErrPoint">是否输出椭圆Geo点</param>
+        /// <param name="pe">概率(范围0-1,默认0.5)</param>
+        /// <returns></returns>
+        public static ErrEllipseResDto ErrorEllipseX3(double posLon, double posLat, double[] mainEph, double[] adja1Eph, double[] adja2Eph,
+             double[] RefGeod, double dtoErrus, double ephErrm, bool outputErrPoint, double pe = 0.5)
+        {
+            if (RefGeod.Length == 2)
+            {
+                RefGeod = RefGeod.Concat(new double[1] { 0 }).ToArray();
+            }
+            int LOP_Len = 0;
+            IntPtr LOP_ValuePtr = Error_Ellipse_3X_2DTO(
+                   mainEph,
+                   adja1Eph,
+                   adja2Eph,
+                   RefGeod,
+                    new double[3] { posLon, posLat, 0 },
+                    dtoErrus * 1e-6,
+                    ephErrm,
+                    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)
+                {
+                    res.GeoPoints.Add(new GeoPoint()
+                    {
+                        Lon = LOP_Value[i],
+                        Lat = LOP_Value[i + 1],
+                    });
+                }
+            }
+            return res;
+        }
     }
 }

+ 0 - 21
XdCxRhDW.Api/AddIns/低轨/LeoErrorEllipseHelper.cs

@@ -292,26 +292,6 @@ namespace XdCxRhDW.Api
             return ParseResult(LOP_ValuePtr, LOP_Len, outputErrPoint);
         }
 
-
-        public static ErrEllipseResDto ErrorEllipseLeoX3(ErrorEllipseX3Option opt, bool outputErrPoint)
-        {
-
-#warning 未提供低轨三星误差椭圆算法 
-            int LOP_Len = 0;
-            IntPtr LOP_ValuePtr = Error_Ellipse_DTFO(
-                opt.MsEph,
-                 opt.NsEph1,
-                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, outputErrPoint);
-        }
-
-
         public static ErrEllipseResDto ErrorEllipse2X1D(ErrorEllipse2X1DOption opt, bool outputErrPoint)
         {
             int LOP_Len = 0;
@@ -349,7 +329,6 @@ namespace XdCxRhDW.Api
             {
                 Marshal.Copy(LOP_ValuePtr, LOP_Value, 0, LOP_Value.Length);
             }
-#warning 低轨多星误差椭圆是否包含长轴、短轴、倾角
             ErrEllipseResDto res = new ErrEllipseResDto();
             res.LongRadius = LOP_Value[LOP_Value.Length - 3];
             res.ShortRadius = LOP_Value[LOP_Value.Length - 2];

+ 53 - 40
XdCxRhDW.App/Controllers/EllipseController.cs

@@ -6,6 +6,7 @@ using System.Linq;
 using System.Threading.Tasks;
 using System.Web.Http;
 using DevExpress.Data.Svg;
+using DevExpress.Mvvm.Native;
 using XdCxRhDW.Api;
 using XdCxRhDW.Dto;
 using XdCxRhDW.Entity;
@@ -32,7 +33,8 @@ namespace XdCxRhDW.App.Controllers
                 double[] adjaEcef = new double[3] { dto.AdjaX, dto.AdjaY, dto.AdjaZ };
                 double[] cdbLoc = new double[2] { dto.CdbLon, dto.CdbLat };
                 double[] refLoc = new double[2] { dto.RefLon, dto.RefLat };
-                var res = ErrEllipseHepler.ErrorEllipse2X1D(dto.PosLon, dto.PosLat, mainEcef, adjaEcef, cdbLoc, refLoc, dto.DtoErrus, dto.EphErr, dto.OutputErrPoint,dto.Pe);
+                var res = ErrEllipseHepler.ErrorEllipse2X1D(dto.PosLon, dto.PosLat, mainEcef, adjaEcef, cdbLoc,
+                    refLoc, dto.DtoErrus, dto.EphErr, dto.OutputErrPoint, dto.Pe);
                 return Success(res);
             });
         }
@@ -48,7 +50,8 @@ namespace XdCxRhDW.App.Controllers
                 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[2] { dto.CdbLon, dto.CdbLat };
-                var res = ErrEllipseHepler.ErrorEllipse2X1DNoRef(dto.PosLon, dto.PosLat, mainEcef, adjaEcef, cdbLoc, dto.DtoErrus, dto.EphErr, dto.OutputErrPoint,dto.Pe);
+                var res = ErrEllipseHepler.ErrorEllipse2X1DNoRef(dto.PosLon, dto.PosLat, mainEcef, adjaEcef,
+                    cdbLoc, dto.DtoErrus, dto.EphErr, dto.OutputErrPoint, dto.Pe);
                 return Success(res);
             });
         }
@@ -62,16 +65,18 @@ namespace XdCxRhDW.App.Controllers
         {
             return await Task.Run(() =>
             {
-                ErrorEllipseX1Option option = new ErrorEllipseX1Option();
-                option.MsEph = dto.MsEph;
-                option.NsEph1 = dto.NsEph1;
-                option.NsEph2 = dto.NsEph2;
-                option.SelectPoint = dto.SelectPoint;
-                option.DfoErr = dto.DfoErr;
-                option.EphPosErr = dto.EphPosErr;
-                option.EphVelErr = dto.EphVelErr;
-                option.fu = dto.fu;
-                option.Pe = dto.Pe;
+                ErrorEllipseX1Option option = new ErrorEllipseX1Option()
+                {
+                    MsEph = dto.MsEph,
+                    NsEph1 = dto.NsEph1,
+                    NsEph2 = dto.NsEph2,
+                    SelectPoint = dto.SelectPoint,
+                    DfoErr = dto.DfoErr,
+                    EphPosErr = dto.EphPosErr,
+                    EphVelErr = dto.EphVelErr,
+                    fu = dto.fu,
+                    Pe = dto.Pe
+                };
                 var res = LeoErrorEllipseHelper.ErrorEllipseLeoX1(option, dto.OutputErrPoint);
                 return Success(res);
             });
@@ -86,18 +91,20 @@ namespace XdCxRhDW.App.Controllers
         {
             return await Task.Run(() =>
             {
-                ErrorEllipseX2Option option = new ErrorEllipseX2Option();
-                option.MsEph = dto.MsEph;
-                option.NsEph = dto.NsEph;
-                option.RefGeod = dto.RefGeod;
-                option.SelectPoint = dto.SelectPoint;
-                option.DtoErr = dto.DtoErr;
-                option.DfoErr = dto.DfoErr;
-                option.EphPosErr = dto.EphPosErr;
-                option.EphVelErr = dto.EphVelErr;
-                option.fu1 = dto.fu1;
-                option.fu2 = dto.fu2;
-                option.Pe = dto.Pe;
+                ErrorEllipseX2Option option = new ErrorEllipseX2Option()
+                {
+                    MsEph = dto.MsEph,
+                    NsEph = dto.NsEph,
+                    RefGeod = dto.RefGeod,
+                    SelectPoint = dto.SelectPoint,
+                    DtoErr = dto.DtoErrUs / 1e6,
+                    DfoErr = dto.DfoErr,
+                    EphPosErr = dto.EphPosErr,
+                    EphVelErr = dto.EphVelErr,
+                    fu1 = dto.fu1,
+                    fu2 = dto.fu2,
+                    Pe = dto.Pe
+                };
                 var res = LeoErrorEllipseHelper.ErrorEllipseLeoX2(option, dto.OutputErrPoint);
                 return Success(res);
             });
@@ -105,30 +112,36 @@ namespace XdCxRhDW.App.Controllers
 
 
         /// <summary>
-        /// 低轨三星带参误差椭圆
+        /// 三星双时差带参误差椭圆(高轨和低轨均适用)
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        public async Task<AjaxResult<ErrEllipseResDto>> X3Leo(ErrorEllipseLeoX3Dto dto)
+        public async Task<AjaxResult<ErrEllipseResDto>> X3TwoDto(ErrEllipseX3Dto dto)
         {
             return await Task.Run(() =>
             {
-                ErrorEllipseX3Option option = new ErrorEllipseX3Option();
-                option.MsEph = dto.MsEph;
-                option.NsEph1 = dto.NsEph1;
-                option.NsEph2 = dto.NsEph2;
-                option.RefGeod = dto.RefGeod;
-                option.SelectPoint = dto.SelectPoint;
-                option.DtoErr = dto.DtoErr;
-                option.DfoErr = dto.DfoErr;
-                option.EphPosErr = dto.EphPosErr;
-                option.EphVelErr = dto.EphVelErr;
-                option.fu1 = dto.fu1;
-                option.fu2 = dto.fu2;
-                option.Pe = dto.Pe;
-                var res = LeoErrorEllipseHelper.ErrorEllipseLeoX3(option, dto.OutputErrPoint);
+                double[] mainEcef = new double[3] { dto.MainX, dto.MainY, dto.MainZ };
+                double[] adja1Ecef = new double[3] { dto.Adja1X, dto.Adja1Y, dto.Adja1Z };
+                double[] adja2Ecef = new double[3] { dto.Adja2X, dto.Adja2Y, dto.Adja2Z };
+                double[] refLoc = new double[2] { dto.RefLon, dto.RefLat };
+                var res = ErrEllipseHepler.ErrorEllipseX3(dto.PosLon, dto.PosLat, mainEcef, adja1Ecef, adja2Ecef,
+                    refLoc, dto.DtoErrus, dto.EphErr, dto.OutputErrPoint, dto.Pe);
                 return Success(res);
             });
         }
+
+        /// <summary>
+        /// 三星双时差无参误差椭圆(高轨和低轨均适用)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<AjaxResult<ErrEllipseResDto>> X3TwoDtoNoRef(ErrEllipseX3NoRefDto dto)
+        {
+#warning 三星双时差误差椭圆缺少无参的算法
+            return await Task.Run(() =>
+            {
+                return Error<ErrEllipseResDto>("三星双时差误差椭圆缺少无参的算法");
+            });
+        }
     }
 }

+ 1 - 0
XdCxRhDw.Dto/02.XdCxRhDW.Dto.csproj

@@ -59,6 +59,7 @@
     <Compile Include="CpuCgMultiDto.cs" />
     <Compile Include="ErrEllipseLeoDto.cs" />
     <Compile Include="ErrEllipseResDto.cs" />
+    <Compile Include="ErrEllipseX3Dto.cs" />
     <Compile Include="ErrEllipseX2D1Dto.cs" />
     <Compile Include="ImageResultDto.cs" />
     <Compile Include="CgResQueryDto.cs" />

+ 25 - 133
XdCxRhDw.Dto/ErrEllipseLeoDto.cs

@@ -12,22 +12,22 @@ namespace XdCxRhDW.Dto
     public class ErrorEllipseLeoX1Dto
     {
         /// <summary>
-        /// 第一时刻星历
+        /// 第一时刻星历(长度6)
         /// </summary>
         public double[] MsEph { get; set; }
 
         /// <summary>
-        ///第二时刻星历
+        ///第二时刻星历(长度6)
         /// </summary>
         public double[] NsEph1 { get; set; }
 
         /// <summary>
-        /// 第三时刻星历
+        /// 第三时刻星历(长度6)
         /// </summary>
         public double[] NsEph2 { get; set; }
 
         /// <summary>
-        /// 定位点
+        /// 定位点(长度2)
         /// </summary>
         public double[] SelectPoint { get; set; }
 
@@ -35,21 +35,26 @@ namespace XdCxRhDW.Dto
         /// 频差误差(Hz)
         /// </summary>
         public double DfoErr { get; set; }
+
         /// <summary>
-        /// 星历位置误差
+        /// 星历位置误差(m)
         /// </summary>
         public double EphPosErr { get; set; }
+
         /// <summary>
-        ///星历速度误差
+        ///星历速度误差(m/s)
         /// </summary>
         public double EphVelErr { get; set; }
+
         /// <summary>
         /// 上行频点(Hz)
         /// </summary>
         public double fu { get; set; }
+
         /// <summary>
-        /// 概率 默认0.5
+        /// 概率(默认0.5)
         /// </summary>
+        [RangeDouble(0,1)]
         public double Pe { get; set; } = 0.5;
 
         /// <summary>
@@ -65,105 +70,42 @@ namespace XdCxRhDW.Dto
     public class ErrorEllipseLeoX2Dto
     {
         /// <summary>
-        /// 主星星历
+        /// 主星星历(长度6)
         /// </summary>
         public double[] MsEph { get; set; }
 
         /// <summary>
-        /// 邻星星历
+        /// 邻星星历(长度6)
         /// </summary>
         public double[] NsEph { get; set; }
 
         /// <summary>
-        /// 参考站位置
+        /// 参考站位置(长度2)
         /// </summary>
         public double[] RefGeod { get; set; }
 
         /// <summary>
-        /// 定位点
+        /// 定位点(长度2)
         /// </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;
-
-        /// <summary>
-        /// 是否输出椭圆位置信息
-        /// </summary>
-        public bool OutputErrPoint { get; set; }
-    }
-
-    /// <summary>
-    /// 低轨三星误差椭圆参数模型
-    /// </summary>
-    public class ErrorEllipseLeoX3Dto
-    {
-        /// <summary>
-        /// 主星星历
-        /// </summary>
-        public double[] MsEph { get; set; }
-
-        /// <summary>
-        /// 邻星1星历
-        /// </summary>
-        public double[] NsEph1 { get; set; }
-
-        /// <summary>
-        /// 邻星2星历
-        /// </summary>
-        public double[] NsEph2 { get; set; }
-
-        /// <summary>
-        /// 参考站位置
+        /// 时差误差(us)
         /// </summary>
-        public double[] RefGeod { get; set; }
+        public double DtoErrUs { 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>
-        /// 星历位置误差
+        /// 星历位置误差(m)
         /// </summary>
         public double EphPosErr { get; set; }
+
         /// <summary>
-        ///星历速度误差
+        ///星历速度误差(m/s)
         /// </summary>
         public double EphVelErr { get; set; }
 
@@ -171,71 +113,21 @@ namespace XdCxRhDW.Dto
         /// 上行频点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;
-
-        /// <summary>
-        /// 是否输出椭圆位置信息
-        /// </summary>
-        public bool OutputErrPoint { get; set; }
-    }
 
-    /// <summary>
-    /// 两星一地误差椭圆参数模型
-    /// </summary>
-    public class ErrorEllipseX2D1Dto
-    {
         /// <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
+        /// 概率(默认0.5)
         /// </summary>
+        [RangeDouble(0, 1)]
         public double Pe { get; set; } = 0.5;
 
         /// <summary>
         /// 是否输出椭圆位置信息
         /// </summary>
         public bool OutputErrPoint { get; set; }
-
     }
-
- 
 }

+ 138 - 0
XdCxRhDw.Dto/ErrEllipseX3Dto.cs

@@ -0,0 +1,138 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.Dto
+{
+    /// <summary>
+    /// 三星双时差带参误差椭圆参数模型(高轨和低轨均适用)
+    /// </summary>
+    public class ErrEllipseX3Dto : ErrEllipseX3NoRefDto
+    {
+        /// <summary>
+        /// 参考站经度
+        /// </summary>
+        public double RefLon { get; set; }
+
+        /// <summary>
+        /// 参考站纬度
+        /// </summary>
+        public double RefLat { get; set; }
+
+    }
+    /// <summary>
+    /// 三星双时差无参误差椭圆参数模型(高轨和低轨均适用)
+    /// </summary>
+    public class ErrEllipseX3NoRefDto
+    {
+        /// <summary>
+        /// 创建带参的参数模型
+        /// </summary>
+        /// <param name="refLon">参考站经度</param>
+        /// <param name="refLat">参考站纬度</param>
+        /// <returns></returns>
+        public ErrEllipseX3Dto WithRef(double refLon, double refLat)
+        {
+            return new ErrEllipseX3Dto()
+            {
+                RefLon = refLon,
+                RefLat = refLat,
+                Adja1X = Adja1X,
+                Adja1Y = Adja1Y,
+                Adja1Z = Adja1Z,
+                Adja2X = Adja2X,
+                Adja2Y = Adja2Y,
+                Adja2Z = Adja2Z,
+                DtoErrus = DtoErrus,
+                EphErr = EphErr,
+                MainX = MainX,
+                MainY = MainY,
+                MainZ = MainZ,
+                OutputErrPoint = OutputErrPoint,
+                PosLat = PosLat,
+                PosLon = PosLon,
+                Pe = Pe
+            };
+
+        }
+
+        /// <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>
+        /// 邻1星ECEF坐标X
+        /// </summary>
+        public double Adja1X { get; set; }
+
+        /// <summary>
+        /// 邻1星ECEF坐标Y
+        /// </summary>
+        public double Adja1Y { get; set; }
+
+        /// <summary>
+        /// 邻1星ECEF坐标Z
+        /// </summary>
+        public double Adja1Z { get; set; }
+
+        /// <summary>
+        /// 邻2星ECEF坐标X
+        /// </summary>
+        public double Adja2X { get; set; }
+
+        /// <summary>
+        /// 邻2星ECEF坐标Y
+        /// </summary>
+        public double Adja2Y { get; set; }
+
+        /// <summary>
+        /// 邻2星ECEF坐标Z
+        /// </summary>
+        public double Adja2Z { get; set; }
+
+        /// <summary>
+        /// 时差误差(us)
+        /// </summary>
+        public double DtoErrus { get; set; }
+
+        /// <summary>
+        /// 星历误差(米)
+        /// </summary>
+        public double EphErr { get; set; }
+
+        /// <summary>
+        /// 概率(0-1)
+        /// </summary>
+        [RangeDouble(0, 1)]
+        public double Pe { get; set; } = 0.5;
+
+        /// <summary>
+        /// 是否输出椭圆位置信息
+        /// </summary>
+        public bool OutputErrPoint { get; set; }
+
+    }
+}