gongqiuhong 1 year ago
parent
commit
6ae31bfe74

+ 1 - 46
XdCxRhDW.App/Api/时差线/DrawDtoLineHelper.cs

@@ -10,52 +10,7 @@ namespace XdCxRhDW.App.Api.时差线
 {
     public class DrawDtoLineHelper
     {
-        #region 未使用
-        /*
-        static double[] HandleX2D1(X2D1Option opt)
-        {
-            var target_llh = DLL_LXYDApi.XingDi_DW(
-                    opt.MsEph
-                    , opt.NsEph
-                    , opt.MsAnt
-                    , opt.NsAnt
-                    , opt.CDBMsAnt
-                    , opt.CDBAnt
-                    , opt.RefGeod
-                    , opt.Zone
-                    , opt.SxDto * 1e-6
-                    , opt.xdDto * 1e-6
-                    , -opt.SampMsDto * 1e-6
-                    , -opt.SampNsDto * 1e-6
-                    , -opt.CDBpMsDto * 1e-6
-                    );
-            double[] result = new double[6];
-            Marshal.Copy(target_llh, result, 0, result.Length);
-            return result;
-        }
-       
-        static void HandleX1D2(X1D2Option opt)
-        {
-            var target_llh = DLL_YXLDApi.XingDi_DW_YXLD(
-                opt.MsEph
-                , opt.Ms1Ant
-                , opt.Ms2Ant
-                , opt.Nd1Ant
-                , opt.Nd2Ant
-                , opt.RefGeod1
-                , opt.RefGeod2
-                , opt.Zone
-                , opt.DtXd1 * 1e-6
-                , opt.DtXd2 * 1e-6
-                , -opt.DtRef1 * 1e-6
-                , -opt.DtRef2 * 1e-6
-                );
-            double[] result = new double[6];
-            Marshal.Copy(target_llh, result, 0, result.Length);
-            // OutputHelper.WritePos(result);
-        }
-         */
-        #endregion
+     
         private const string exeName = "XingDiSCX.exe";
         private static double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
         /// <summary>

+ 0 - 36
XdCxRhDW.App/Api/时差线/DtoLineModel.cs

@@ -104,42 +104,6 @@ namespace XdCxRhDW.App.Api.时差线
 
     }
 
-    public class DfoLineTwoStartOption
-    {
-        /// <summary>
-        /// 主星星历
-        /// </summary>
-        public double[] MsEph { get; set; }
-
-        /// <summary>
-        /// 邻星星历
-        /// </summary>
-        public double[] NsEph { get; set; }
-
-        /// <summary>
-        /// 参考站位置
-        /// </summary>
-        public double[] RefGeod { get; set; }
-
-        /// <summary>
-        /// 目标频差(Hz)
-        /// </summary>
-        public double TargetDfo { get; set; }
-        /// <summary>
-        /// 参考频差 (Hz)
-        /// </summary>
-        public double RefDfo { get; set; }
-
-        /// <summary>
-        /// 上行频点1(Hz)
-        /// </summary>
-        public double fu1 { get; set; }
-        /// <summary>
-        /// 上行频点2(Hz)
-        /// </summary>
-        public double fu2 { get; set; }
-
-    }
 
   
 }

+ 76 - 0
XdCxRhDW.App/Api/频差线/DfoLineModel.cs

@@ -0,0 +1,76 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.App.Api
+{
+    public class DfoLinePoint 
+    {
+        /// <summary>
+        /// 经度
+        /// </summary>
+        public double Lon { get; set; }
+        /// <summary>
+        /// 纬度
+        /// </summary>
+        public double Lat { get; set; }
+    }
+    public class DfoLineTwoStartOption
+    {
+        /// <summary>
+        /// 上行频点Hz
+        /// </summary>
+        public double Freq { get; set; }
+        /// <summary>
+        /// 主星接收站
+        /// </summary>
+        public double[] MsAnt { get; set; }
+
+        /// <summary>
+        /// 邻星接收站
+        /// </summary>
+        public double[] NsAnt { get; set; }
+
+        /// <summary>
+        /// 主星星历 6
+        /// </summary>
+        public double[] MsEph { get; set; }
+
+        /// <summary>
+        /// 邻星星历 6
+        /// </summary>
+        public double[] NsEph { get; set; }
+
+        /// <summary>
+        /// 参考站位置
+        /// </summary>
+        public double[] RefGeod { get; set; }
+
+        /// <summary>
+        /// 目标频差(Hz)
+        /// </summary>
+        public double TargetDfo { get; set; }
+        /// <summary>
+        /// 参考频差 (Hz)
+        /// </summary>
+        public double RefDfo { get; set; }
+
+        /// <summary>
+        /// 参考频点Hz
+        /// </summary>
+        public double RefFreq { get; set; }
+
+        /// <summary>
+        /// 主星本振(Hz)
+        /// </summary>
+        public double Turn1 { get; set; }
+        /// <summary>
+        /// 邻星本振(Hz)
+        /// </summary>
+        public double Turn2 { get; set; }
+
+    }
+
+}

+ 87 - 0
XdCxRhDW.App/Api/频差线/DrawDfoLineHelper.cs

@@ -0,0 +1,87 @@
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+
+namespace XdCxRhDW.App.Api
+{
+    public class DrawDfoLineHelper
+    {
+      
+        private const string exeName = "locow.exe";
+        private static double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
+        /// <summary>
+        /// 高轨双星时差线
+        /// </summary>
+        /// <param name="opt"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public static IEnumerable<(double lon, double lat)> DtfoLineTwoStart(DfoLineTwoStartOption opt)
+        {
+            List<DfoLinePoint> list = new List<DfoLinePoint>();
+
+            string exePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "API\\频差线");
+            if (string.IsNullOrWhiteSpace(exePath))
+                throw new Exception($"请先调用SetExePath指定{exeName}进程所在路径,支持相对路径");
+            if (!Directory.Exists(exePath))
+                throw new Exception($"路径[{exePath}]不存在");
+            var exeFile = Path.Combine(exePath, exeName);
+            if (!File.Exists(exeFile))
+                throw new Exception($"文件[{exeFile}]不存在");
+            List<string> arguments = new List<string>();
+            arguments.Add("dfoline");
+            arguments.Add($"{opt.TargetDfo}");
+            arguments.Add($"{opt.Freq*1e6}");
+            arguments.Add($"{opt.Turn1 * 1e6}");
+            arguments.Add($"{opt.Turn2 * 1e6}");
+            arguments.Add($"--rec1 {opt.MsAnt[0]} {opt.MsAnt[1]} 0");
+            arguments.Add($"--rec1 {opt.NsAnt[0]} {opt.NsAnt[1]} 0");
+
+            arguments.Add($"--eph1 {opt.MsEph[0]} {opt.MsEph[1]} {opt.MsEph[2]} {opt.MsEph[3]} {opt.MsEph[4]} {opt.MsEph[5]}");
+            arguments.Add($"--eph1 {opt.NsEph[0]} {opt.NsEph[1]} {opt.NsEph[2]} {opt.NsEph[3]} {opt.NsEph[4]} {opt.NsEph[5]}");
+            arguments.Add($"--refdf {opt.RefDfo}");
+            arguments.Add($"--reffreq {opt.RefFreq}");
+
+            arguments.Add($"--reflla {opt.RefGeod[0]} {opt.RefGeod[0]} 0");
+            Process p = new Process();
+            p.StartInfo.WorkingDirectory = exePath;
+            p.StartInfo.FileName = exeFile;
+            p.StartInfo.Arguments = string.Join(" ", arguments);
+            p.StartInfo.CreateNoWindow = true;
+            p.StartInfo.RedirectStandardError = true;
+            p.StartInfo.RedirectStandardOutput = true;
+            p.StartInfo.UseShellExecute = false;
+            p.Start();
+            var succeed = p.WaitForExit(10000);
+            if (!succeed)
+            {
+                throw new Exception($"进程[{exeName}]超时未完成!");
+            }
+            string result = p.StandardOutput.ReadToEnd();
+            if (string.IsNullOrWhiteSpace(result))
+            {
+                throw new Exception("计算时差线出现未知错误!");
+            }
+            var array = result.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+            if (array[0] == "1")
+            {
+                throw new Exception(array[1]);
+            }
+            //if (File.Exists(file))
+            //{
+            //    var dtostr = File.ReadAllText(file);
+            //    list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<DfoLinePoint>>(dtostr);
+            //}
+            var Lines = list.Select(s => (s.Lon, s.Lat));
+            return Lines;
+        }
+
+        
+
+       
+
+    }
+}

BIN
XdCxRhDW.App/Api/频差线/Positioning.dll


BIN
XdCxRhDW.App/Api/频差线/Positioning_calc.dll


BIN
XdCxRhDW.App/Api/频差线/Positioning_dtf.dll


BIN
XdCxRhDW.App/Api/频差线/locow.exe


BIN
XdCxRhDW.App/Api/频差线/msvcp100.dll


BIN
XdCxRhDW.App/Api/频差线/msvcr100.dll


+ 39 - 0
XdCxRhDW.App/DxHelper/EnumExtension.cs

@@ -0,0 +1,39 @@
+using DevExpress.XtraEditors;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using XdCxRhDW.App.Model;
+
+namespace DxHelper
+{
+    /// <summary>
+    /// 枚举扩展
+    /// </summary>
+    public static class EnumExtension
+    {
+        /// <summary>
+        /// 获取枚举描述
+        /// </summary>
+        /// <param name="enumType">枚举类型</param>
+        /// <returns></returns>
+        public static string GetEnumDisplayName(this Enum enumType)
+        {
+            try
+            {
+                Type type = enumType.GetType();
+                var field = type.GetField(Enum.GetName(type, enumType));
+                string displayName = field.GetCustomAttribute<DisplayAttribute>().Name;
+                return displayName;
+            }
+            catch
+            {
+                return string.Empty;
+            }
+           
+        }
+    }
+}

+ 158 - 7
XdCxRhDW.App/ExtensionsDev/MapControlEx.cs

@@ -238,6 +238,7 @@ public static class MapControlEx
         internal PopupMenu rectMenu;
         internal Action<(double starLon, double startLat, double centerLon, double centerLat,
     double endLon, double endLat, double lonRange, double latRange)> mOnRectChanged;
+        internal Action<(double Lon, double Lat)> onClickChanged;
         internal MapItemStorage mMapStorage;
         internal MapItemStorage mMapStorageFixed;
         internal MapPolyline distinctPath;
@@ -955,6 +956,71 @@ public static class MapControlEx
         innerData.barM.EndInit();
         return ctrl;
     }
+    /// <summary>
+    /// 使用航迹
+    /// </summary>
+    /// <param name="ctrl"></param>
+    /// <param name="onClickChanged">点击事件返回当前经纬度</param>
+    /// <returns></returns>
+    public static MapControl UseHJ(this MapControl ctrl, Action<(double Lon, double Lat)> onClickChanged = null)
+    {
+        var btnHJ = new BarButtonItem() { Caption = "航迹" };
+        btnHJ.ImageOptions.SvgImage = SvgHelper.CreateMarkDot();
+        btnHJ.Tag = ctrl;
+       
+        var innerData = ctrl.Tag as InnerData;
+        innerData.onClickChanged = onClickChanged;
+        btnHJ.ItemClick += (sender, e) =>
+        {
+            ctrl.MapEditor.SetEditMode();
+            ctrl.MouseClick += AddHJPoint;
+            ctrl.DoubleClick += (sender1, e1) =>
+            {
+                ctrl.MouseClick -= AddHJPoint;
+            };
+        };
+        innerData.barM.BeginInit();
+        innerData.barM.Items.Add(btnHJ);
+        innerData.mapMenu.LinksPersistInfo.Add(new LinkPersistInfo(btnHJ));
+        innerData.barM.EndInit();
+        return ctrl;
+    }
+
+    /// <summary>
+    /// 添加航迹点
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="ctrl"></param>
+    /// <param name="item"></param>
+    public static void AddHJPosItem<T>(this MapControl ctrl, T item) where T : PosData, new()
+    {
+        if (item.PosLon > 180) return;
+        var innerData = ctrl.Tag as InnerData;
+        var mapItem = new MapDot()
+        {
+            EnableHighlighting = DefaultBoolean.True,
+            EnableSelection = DefaultBoolean.False,
+            CanMove = false,
+            Visible = item.Visible,
+            IsHitTestVisible = true,
+            Fill = ColorHelper.IsHtmlColor(item.ColorKey) ? ColorTranslator.FromHtml(item.ColorKey) : ColorHelper.GetColor(item.ColorKey),
+            Size = _dotSize,
+            Tag = item,
+            Location = new GeoPoint(item.PosLat, item.PosLon),
+            ToolTipPattern="dd"
+        };
+        innerData.mMapStorage.Items.Add(mapItem);
+
+    }
+    private static void AddHJPoint(object sender, MouseEventArgs e)
+    {
+        var innerData = (sender as MapControl).Tag as InnerData;
+        var ctrl = sender as MapControl;
+        var geoPoint = ctrl.ScreenPointToCoordPoint(e.Location) as GeoPoint;
+        innerData.onClickChanged?.Invoke((geoPoint.Longitude, geoPoint.Latitude));
+
+    }
+
 
     /// <summary>
     /// 为地图添加右键标点功能
@@ -1376,6 +1442,7 @@ public static class MapControlEx
     }
     public static void DrawDtoPonit(this MapControl ctrl, string title, IEnumerable<(double lon, double lat)> lines)
     {
+        string identify = "DrawPoint_";
         if (lines == null || !lines.Any()) return;
         var innerData = ctrl.Tag as InnerData;
 
@@ -1395,7 +1462,7 @@ public static class MapControlEx
                 IsHitTestVisible = true,
                 Fill = color,
                 Size = 4,
-                Tag = $"DrawPoint_{title}{lines.ElementAt(i).lon}",
+                Tag = $"{identify}{title}{lines.ElementAt(i).lon}",
                 Location = new GeoPoint(p.lat, p.lon),
                 ToolTipPattern = $"{title}",
 
@@ -1432,6 +1499,45 @@ public static class MapControlEx
         if (!polyLine.Points.Any()) return;
         innerData.mMapStorage.Items.Add(polyLine);
     }
+    /// <summary>
+    /// 绘制线
+    /// </summary>
+    /// <param name="ctrl"></param>
+    /// <param name="title"></param>
+    /// <param name="lines"></param>
+    /// <param name="isClear">是否清除上次绘制</param>
+    public static void DrawCXLine(this MapControl ctrl, string title, IEnumerable<(double lon, double lat)> lines, bool isClear = true)
+    {
+        string identify = "DrawCXLine_";
+        if (lines == null || !lines.Any()) return;
+        var innerData = ctrl.Tag as InnerData;
+        if (isClear)
+        {
+            var mapItem = innerData.mMapStorage.Items.Find(m => m.Tag.ToString().StartsWith(identify));
+            if (mapItem != null)
+            {
+                innerData.mMapStorage.Items.Remove(mapItem);
+            }
+        }
+        var polyLine = new MapPolyline()
+        {
+            Stroke = Color.Red,
+            StrokeWidth = 3,
+            CanMove = false,
+            Visible = true,
+            IsHitTestVisible = true,
+            Tag = $"{identify}{title}",
+            ToolTipPattern= title,
+
+        };
+        foreach (var item in lines)
+        {
+            if (double.IsNaN(item.lat) || double.IsNaN(item.lon)) continue;
+            polyLine.Points.Add(new GeoPoint(item.lat, item.lon));
+        }
+        if (!polyLine.Points.Any()) return;
+        innerData.mMapStorage.Items.Add(polyLine);
+    }
     public static void DrawErrEllipse(this MapControl ctrl, double r1, double r2, IEnumerable<(double lon, double lat)> lines)
     {
         if (lines == null || !lines.Any()) return;
@@ -1474,11 +1580,19 @@ public static class MapControlEx
     /// <param name="wcKm"></param>
     /// <param name="dots"></param>
     /// <param name="patterncount"></param>
-    public static void DrawGdopLineTwo(this MapControl ctrl, string wcKm, IEnumerable<(double lon, double lat)> dots, int patterncount)
+    public static void DrawGdopLineTwo(this MapControl ctrl, string wcKm, IEnumerable<(double lon, double lat)> dots, int patterncount, bool isClear = true)
     {
         if (dots == null || !dots.Any()) return;
+        string identify = "DrawGdopLine_";
         var innerData = ctrl.Tag as InnerData;
-
+        if (isClear)
+        {
+            var mapItem = innerData.mMapStorage.Items.Find(m => m.Tag.ToString().StartsWith(identify));
+            if (mapItem != null)
+            {
+                innerData.mMapStorage.Items.Remove(mapItem);
+            }
+        }
         //多条线 两个点绘制一个线段 1和2一个线段 3和4一个线段
         List<MapPolyline> polylines = new List<MapPolyline>();
         int index = 0;
@@ -1503,7 +1617,7 @@ public static class MapControlEx
                     CanRotate = false,
                     IsHitTestVisible = true,
                     CanMove = false,
-                    Tag = $"DrawGdopLine_{wcKm}",
+                    Tag = $"{identify}{wcKm}",
                 };
 
             }
@@ -1570,7 +1684,7 @@ public static class MapControlEx
             //Dialog.Error(ex);
         }
     }
-    
+
     /// <summary>
     /// 度 转换成 弧度
     /// </summary>
@@ -1582,6 +1696,42 @@ public static class MapControlEx
         return degrees * degToRadFactor;
     }
 
+    /// <summary>
+    /// 计算两个点之间的距离
+    /// </summary>
+    /// <param name="startlon">开始经度</param>
+    /// <param name="startlat">开始纬度</param>
+    /// <param name="endlon">结束经度</param>
+    /// <param name="endlat">结束纬度</param>
+    /// <returns></returns>
+    public static double CalcLineKm(double startlon, double startlat, double endlon, double endlat)
+    {
+        GeoPoint startPoint = new GeoPoint() { Longitude = startlon, Latitude = startlat };
+        GeoPoint endPoint = new GeoPoint() { Longitude = endlon, Latitude = endlat };
+        double result = 0;
+        MapSize sizeInKm = new SphericalMercatorProjection().GeoToKilometersSize(startPoint, new MapSize(Math.Abs(startPoint.Longitude - endPoint.Longitude), Math.Abs(startPoint.Latitude - endPoint.Latitude)));
+        result = Math.Sqrt(sizeInKm.Width * sizeInKm.Width + sizeInKm.Height * sizeInKm.Height);
+        return result;
+    }
+
+    /// <summary>
+    /// 计算方向线坐标
+    /// </summary>
+    /// <param name="lon">经度</param>
+    /// <param name="lat">纬度</param>
+    /// <param name="deg"> 艏向角 角度制</param>
+    /// <param name="dis">长度 m</param>
+    /// <returns></returns>
+    public static (double, double) CalcSituation(double lon, double lat, double deg, double dis)
+    {
+        double arc = 6371.393 * 1000;       //地球平均半径
+        double rad = deg * (Math.PI / 180); //角度转弧度
+        double c_lng = lon + dis * Math.Sin(rad) / (arc * Math.Cos(lat) * 2 * Math.PI / 360);
+
+        double c_lat = lat + dis * Math.Cos(rad) / (arc * 2 * Math.PI / 360);
+
+        return (c_lng, c_lat);  //方向上的另一点坐标
+    }
     /**
     * 求B点经纬度
     * @param A 已知点的经纬度,
@@ -1824,6 +1974,7 @@ public static class MapControlEx
         ctrl.MouseEnter += MapControl_MouseEnter;
         ctrl.DoubleClick += EndDistinct;
     }
+
     private static void MarkDot_ItemClick(object sender, ItemClickEventArgs e)
     {
         var ctrl = e.Item.Tag as MapControl;
@@ -1926,6 +2077,7 @@ public static class MapControlEx
 
         return result;
     }
+
     public static void ClearMap(this MapControl ctrl)
     {
         var innerData = ctrl.Tag as InnerData;
@@ -2553,5 +2705,4 @@ public static class MapControlEx
         }
 
     }
-}
-
+}

+ 0 - 1
XdCxRhDW.App/MainForm.Designer.cs

@@ -28,7 +28,6 @@
         /// </summary>
         private void InitializeComponent()
         {
-            this.components = new System.ComponentModel.Container();
             this.components = new System.ComponentModel.Container();
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
             DevExpress.Utils.SuperToolTip superToolTip2 = new DevExpress.Utils.SuperToolTip();

+ 5 - 2
XdCxRhDW.App/UserControl/CtrlCgRes.cs

@@ -1,5 +1,7 @@
-using DevExpress.XtraEditors;
+using DevExpress.Data;
+using DevExpress.XtraEditors;
 using DevExpress.XtraExport.Helpers;
+using DevExpress.XtraGrid.Columns;
 using DevExpress.XtraGrid.Views.Grid;
 using System;
 using System.Collections.Generic;
@@ -30,6 +32,7 @@ namespace XdCxRhDW.App.UserControl
             try
             {
                 gridCg.Init().UseSort().UseFilter().UseMultiSelect().UseRowNumber();
+                gridView1.Columns["SigTime"].SortOrder = ColumnSortOrder.Descending;
                 using (RHDWContext db = new RHDWContext())
                 {
                     gridCg.DataSource = await db.CgRes.OrderByDescending(p => p.SigTime).ToListAsync();
@@ -37,7 +40,7 @@ namespace XdCxRhDW.App.UserControl
             }
             catch (Exception ex)
             {
-                Serilog.Log.Error(ex,"查询参估结果异常");
+                Serilog.Log.Error(ex, "查询参估结果异常");
                 DxHelper.MsgBoxHelper.ShowError("查询参估结果异常");
 
             }

+ 325 - 141
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -1,38 +1,30 @@
-using DevExpress.Mvvm.DataAnnotations;
-using DevExpress.Utils;
-using DevExpress.Utils.Design;
+using DevExpress.Utils;
 using DevExpress.Utils.Drawing;
+using DevExpress.Utils.Drawing.Helpers;
 using DevExpress.Utils.Svg;
-using DevExpress.XtraEditors;
 using DevExpress.XtraEditors.ButtonsPanelControl;
-using DevExpress.XtraEditors.Controls;
-using DevExpress.XtraEditors.Repository;
-using DevExpress.XtraGrid.Columns;
 using DevExpress.XtraGrid.Views.Grid;
 using DevExpress.XtraGrid.Views.Grid.ViewInfo;
+using DevExpress.XtraTreeList.Data;
 using DxHelper;
-using XdCxRhDW.App.EFContext;
-using XdCxRhDW.App.Model;
+using Microsoft.Owin.Hosting;
 using System;
 using System.Collections.Generic;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
 using System.Data;
+using System.Data.Entity;
 using System.Drawing;
 using System.Linq;
-using System.Security.Cryptography;
+using System.Net;
+using System.Reflection;
 using System.Text;
-using System.Threading.Tasks;
 using System.Windows.Forms;
+using XdCxRhDW.App.Api;
+using XdCxRhDW.App.Api.时差线;
 using XdCxRhDW.App.EditForms;
-using System.Data.Entity;
-using DevExpress.XtraBars.Customization;
-using System.Reflection;
-using System.Net.Sockets;
-using System.Net;
-using DevExpress.XtraCharts.Native;
-using System.Threading;
+using XdCxRhDW.App.EFContext;
+using XdCxRhDW.App.Model;
+using XdCxRhDW.App.WebAPI;
 using XdCxRhDW.Dto;
 using XdCxRhDW.App.Api;
 using System.Windows.Controls;
@@ -43,8 +35,6 @@ using System.Web.Http;
 using System.Data.Entity.Migrations;
 using XdCxRhDW.App.Api.时差线;
 using System.Windows.Documents;
-using Newtonsoft.Json;
-using System.Net.Http;
 
 namespace XdCxRhDW.App.UserControl
 {
@@ -74,6 +64,15 @@ namespace XdCxRhDW.App.UserControl
             .UseExportCsv()
             .SetMapLayerType(mapService)
             //.SetMapLayerType("")
+             //.UseHJ(item =>
+             //{
+             //    (double Lon, double Lat) = item;
+             //    PosRes pos = new PosRes();
+             //    pos.PosLon = Lon;
+             //    pos.PosLat = Lat;
+             //    pos.SigTime = DateTime.Now;
+             //    mapControl1.AddHJPosItem(pos);
+             //})
             .UseDrawRect(rect =>
             {
                 (double startLon, double startLat, double centerLon, double centerLat, double endLon, double endLat, double lonRange, double latRange) = rect;
@@ -92,6 +91,7 @@ namespace XdCxRhDW.App.UserControl
                 var items = await db.PosRes.Where(p => p.TaskID == tsk.ID).OrderByDescending(p => p.SigTime).ToListAsync();
                 listPos.AddRange(items);
             }
+           
             this.gridHomePosRes.DataSource = listPos;
             mapControl1.SetPosDataSource(listPos.Where(p => p.PosLon <= 180), false);
         }
@@ -163,12 +163,23 @@ namespace XdCxRhDW.App.UserControl
 
                 mapControl1.AddPosMenu<PosRes>("绘制时差线", SvgHelper.LoadFromFile("Image\\DtoLine.svg"), item =>
                 {
-                    Draw2X1DDtoLine(item);
+                    var posType = GetPosRes(item, "绘制时差线");
+                    DrawDtoLine(item, posType);
+                })
+                .AddPosMenu<PosRes>("绘制频差线", SvgHelper.LoadFromFile("Image\\DfoLine.svg"), item =>
+                {
+                    var posType = GetPosRes(item, "绘制频差线");
+                    DrawDfoLine(item, posType);
                 })
-               .AddPosMenu<PosRes>("绘制频差线", SvgHelper.LoadFromFile("Image\\DfoLine.svg"), item =>
-                      {
-                          // DrawDfoLine(item);
-                      });
+               //.AddPosMenu<PosRes>("绘制GDOP", SvgHelper.LoadFromFile("Image\\GDOP.svg"), item =>
+               // {
+               //     var posType = GetPosRes(item, "绘制GDOP");
+               //     DrawGDOP(item.SigTime, posType);
+               // })
+                 .AddPosMenu<PosRes>("绘制测向线", btnDrawCX.ImageOptions.SvgImage, item =>
+                  {
+                      DrawCXLine(item);
+                  });
 
             }
             catch (Exception ex)
@@ -220,83 +231,6 @@ namespace XdCxRhDW.App.UserControl
         }
 
 
-        private async void Draw2X1DDtoLine(PosRes item)
-        {
-            try
-            {
-                List<TxInfo> listTx = new List<TxInfo>();
-                List<SatInfo> listSat = new List<SatInfo>();
-                CgRes cg;
-                using (RHDWContext db = new RHDWContext())
-                {
-                    listTx = db.TxInfos.ToList();
-                    listSat = db.SatInfos.ToList();
-                    cg = await db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefaultAsync();
-
-                }
-                if (cg == null)
-                {
-                    DxHelper.MsgBoxHelper.ShowWarning($"未找到定位相关的计算[{item.CgResID}]信息");
-                    return;
-                }
-
-                var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
-                if (satTx == null)
-                {
-                    DxHelper.MsgBoxHelper.ShowWarning($"主星天线信息为空!");
-                    return;
-                }
-                var satNTx = listTx.Find(p => p.TxType == EnumTxType.AdjaSat);
-                if (satNTx == null)
-                {
-                    DxHelper.MsgBoxHelper.ShowWarning($"邻星天线信息为空!");
-                    return;
-                }
-                var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
-                if (cdbTx == null)
-                {
-                    DxHelper.MsgBoxHelper.ShowWarning($"超短波信息为空!");
-                    return;
-                }
-                var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
-                if (refTx == null)
-                {
-                    DxHelper.MsgBoxHelper.ShowWarning($"参考站信息为空!");
-                    return;
-                }
-                DtoLineXdOption dtoLineXd = new DtoLineXdOption();
-                dtoLineXd.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
-                dtoLineXd.MsAnt = new double[] { satTx.Lon, satTx.Lat, 0 };
-                dtoLineXd.CDBAnt = new double[] { cdbTx.Lon, cdbTx.Lat, 0 };
-                dtoLineXd.RefGeod = new double[] { refTx.Lon, refTx.Lat, 0 };
-                dtoLineXd.xdDto = cg.DtoCdb;
-                dtoLineXd.RefDto = cg.YbMain;
-                dtoLineXd.PosLon = item.PosLon;
-                dtoLineXd.PosLat = item.PosLat;
-                var xdDtoLine = DrawDtoLineHelper.DtoLineXd(dtoLineXd);
-                mapControl1.DrawDtoPonit($"星地[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == cdbTx.ID)?.Sat}]时差线", xdDtoLine);
-
-                DtoLineTwoStartOption twoStartOption = new DtoLineTwoStartOption();
-                twoStartOption.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
-                twoStartOption.NsEph = new double[] { cg.AdjaX, cg.AdjaY, cg.AdjaZ, 0, 0, 0 };
-                twoStartOption.MsAnt = new double[] { satTx.Lon, satTx.Lat, 0 };
-                twoStartOption.NsAnt = new double[] { satNTx.Lon, satNTx.Lat, 0 };
-                twoStartOption.RefGeod = new double[] { refTx.Lon, refTx.Lat, 0 };
-                twoStartOption.TargetDto = cg.DtoSx;
-                twoStartOption.RefDto = cg.YbMain - cg.YbAdja;
-                twoStartOption.PosLon = item.PosLon;
-                twoStartOption.PosLat = item.PosLat;
-                var tsDtoLine = DrawDtoLineHelper.DtoLineXDTwoStart(twoStartOption);
-                mapControl1.DrawDtoPonit($"双星[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == satNTx.ID)?.Sat}]时差线", tsDtoLine);
-
-
-            }
-            catch (Exception ex)
-            {
-                Serilog.Log.Error("绘制时差线失败", ex);
-                DxHelper.MsgBoxHelper.ShowWarning($"绘制时差线失败,失败信息:{ex.Message}");
-            }
-        }
 
         private void GridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
         {
@@ -350,6 +284,7 @@ namespace XdCxRhDW.App.UserControl
         private void gridView2_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
         {
             if (gridView2.FocusedRowHandle < 0) return;
+           
             if (!gridView2.GetSelectedRows().Any())
             {
                 btnDelPos.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
@@ -358,6 +293,21 @@ namespace XdCxRhDW.App.UserControl
             {
                 btnDelPos.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
             }
+            var posRes = GetPosRes("");
+            switch (posRes.Item2)
+            {
+                case EnumPosType.X1D1CX:
+                    btnGDOP.Visibility= DevExpress.XtraBars.BarItemVisibility.Never;
+                    break;
+                case EnumPosType.X2D1:
+                    btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
+                    break;
+                case EnumPosType.RH:
+                    btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
+                    break;
+                default:
+                    break;
+            }
             popupMenu2.ShowPopup(MousePosition);
         }
         private async void layoutControlGroup1_CustomButtonClick(object sender, DevExpress.XtraBars.Docking2010.BaseButtonEventArgs e)
@@ -608,38 +558,13 @@ namespace XdCxRhDW.App.UserControl
             }
         }
 
-        private async void btnDrawDto_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        private void btnDrawDto_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
             var info = GetPosRes("绘制时差");
             var posRes = info.Item1;
             if (posRes == null) return;
             var posType = info.Item2;
-            await Task.Run(() =>
-            {
-                try
-                {
-                    switch (posType)
-                    {
-                        case EnumPosType.X1D1CX:
-                            throw new Exception("未实现一星一地类型绘制时差线");
-                            break;
-                        case EnumPosType.X2D1:
-                            Draw2X1DDtoLine(posRes);
-                            break;
-                        case EnumPosType.RH:
-                            throw new Exception("未实现融合类型绘制时差线");
-                            break;
-                        default:
-                            break;
-                    }
-                }
-                catch (Exception ex)
-                {
-                    this.Invoke(new Action(() => DxHelper.MsgBoxHelper.ShowWarning($"绘制时差线失败,{ex.Message}")));
-
-                }
-
-            });
+            DrawDtoLine(posRes, posType);
         }
         private (PosRes, EnumPosType) GetPosRes(string msg)
         {
@@ -653,20 +578,42 @@ namespace XdCxRhDW.App.UserControl
             var taskInfo = list.Find(m => m.ID == item.TaskID);
             if (taskInfo == null)
             {
-                DxHelper.MsgBoxHelper.ShowWarning($"未找到任务[{item.TaskID}]!");
+                DxHelper.MsgBoxHelper.ShowWarning($"{msg}未找到任务[{item.TaskID}]!");
                 return (null, default);
             }
             return (item, taskInfo.PosType);
         }
+        private EnumPosType GetPosRes(PosRes posRes, string msg)
+        {
+            var taskInfo = list.Find(m => m.ID == posRes.TaskID);
+            if (taskInfo == null)
+            {
+                DxHelper.MsgBoxHelper.ShowWarning($"{msg}未找到任务[{posRes.TaskID}]!");
+                return default;
+            }
+            return taskInfo.PosType;
+        }
 
         private void btnDrawDfo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
-            DxHelper.MsgBoxHelper.ShowWarning("未实现");
+            var info = GetPosRes("绘制频差");
+            var posRes = info.Item1;
+            if (posRes == null) return;
+            var posType = info.Item2;
+            DrawDfoLine(posRes, posType);
         }
 
         private void btnDrawCX_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
-            DxHelper.MsgBoxHelper.ShowWarning("未实现");
+
+            var ids = gridView2.GetSelectedRows();
+            if (ids.Length <= 0)
+            {
+                DxHelper.MsgBoxHelper.ShowWarning($"请选择需要绘制测向线的定位数据信息!");
+                return;
+            }
+            var item = gridView2.GetRow(ids[0]) as PosRes;
+            DrawCXLine(item);
         }
 
         private void btnGDOP_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
@@ -675,33 +622,270 @@ namespace XdCxRhDW.App.UserControl
             var posRes = info.Item1;
             if (posRes == null) return;
             var posType = info.Item2;
+            DrawGDOP(posRes.SigTime, posType);
+        }
 
+        private void DrawGDOP(DateTime sigTime, EnumPosType posType)
+        {
             try
             {
                 switch (posType)
                 {
                     case EnumPosType.X1D1CX:
-                        throw new Exception("未实现一星一地类型绘制GDOP");
+                        //X1D1GDOPParam x1D1GdopParam = new X1D1GDOPParam(sigTime);
+                        //x1D1GdopParam.mapControl1 = mapControl1;
+                        //DxHelper.PopupHelper.ShowPopup(x1D1GdopParam, mapControl1, mapControl1.Width / 4);
                         break;
                     case EnumPosType.X2D1:
-                        X2D1GDOPParam x2D1GdopParam = new X2D1GDOPParam(posRes.SigTime);
+                    case EnumPosType.RH:
+                        X2D1GDOPParam x2D1GdopParam = new X2D1GDOPParam(sigTime);
                         x2D1GdopParam.mapControl1 = mapControl1;
                         DxHelper.PopupHelper.ShowPopup(x2D1GdopParam, mapControl1, mapControl1.Width / 4);
                         break;
-                    case EnumPosType.RH:
-                        throw new Exception("未实现融合类型绘制GDOP");
-                        break;
+                    //case EnumPosType.RH:
+                    //    GDOPParam gdopParam = new GDOPParam(sigTime);
+                    //    gdopParam.mapControl1 = mapControl1;
+                    //    DxHelper.PopupHelper.ShowPopup(gdopParam, mapControl1, mapControl1.Width / 4);
+                    //    break;
                     default:
                         break;
                 }
             }
             catch (Exception ex)
             {
-                DxHelper.MsgBoxHelper.ShowWarning($"绘制GDOP失败,{ex.Message}");
+                DxHelper.MsgBoxHelper.ShowWarning($"绘制{posType.GetEnumDisplayName()}GDOP失败,{ex.Message}");
 
             }
         }
-    }
 
+        private void DrawDtoLine(PosRes item, EnumPosType posType)
+        {
+
+            switch (posType)
+            {
+                case EnumPosType.X1D1CX:
+                case EnumPosType.X2D1:
+                    DrawXDtoLine(item, posType);
+                    break;
+                case EnumPosType.RH:
+                    DrawXDtoLine(item, EnumPosType.X1D1CX);
+                    DrawXDtoLine(item, EnumPosType.X2D1);
+                    break;
+                default:
+                    break;
+            }
+
+        }
+
+        private async void DrawXDtoLine(PosRes item, EnumPosType posType)
+        {
+            try
+            {
+                List<TxInfo> listTx = new List<TxInfo>();
+                List<SatInfo> listSat = new List<SatInfo>();
+                CgRes cg;
+                using (RHDWContext db = new RHDWContext())
+                {
+                    listTx = db.TxInfos.ToList();
+                    listSat = db.SatInfos.ToList();
+                    cg = await db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefaultAsync();
 
+                }
+                if (cg == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"未找到定位相关的计算[{item.CgResID}]信息");
+                    return;
+                }
+
+                var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
+                if (satTx == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"主星天线信息为空!");
+                    return;
+                }
+                var satNTx = listTx.Find(p => p.TxType == EnumTxType.AdjaSat);
+                if (posType == EnumPosType.X2D1 && satNTx == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"邻星天线信息为空!");
+                    return;
+                }
+                var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
+                if (cdbTx == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"超短波信息为空!");
+                    return;
+                }
+                var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
+                if (refTx == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"参考站信息为空!");
+                    return;
+                }
+                DtoLineXdOption dtoLineXd = new DtoLineXdOption();
+                dtoLineXd.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
+                dtoLineXd.MsAnt = new double[] { satTx.Lon, satTx.Lat, 0 };
+                dtoLineXd.CDBAnt = new double[] { cdbTx.Lon, cdbTx.Lat, 0 };
+                dtoLineXd.RefGeod = new double[] { refTx.Lon, refTx.Lat, 0 };
+                dtoLineXd.xdDto = cg.DtoCdb;
+                dtoLineXd.RefDto = cg.YbMain;
+                dtoLineXd.PosLon = item.PosLon;
+                dtoLineXd.PosLat = item.PosLat;
+                var xdDtoLine = DrawDtoLineHelper.DtoLineXd(dtoLineXd);
+                mapControl1.DrawDtoPonit($"星地[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == cdbTx.ID)?.Sat}]时差线", xdDtoLine);
+
+                if (posType == EnumPosType.X2D1)
+                {
+                    DtoLineTwoStartOption twoStartOption = new DtoLineTwoStartOption();
+                    twoStartOption.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
+                    twoStartOption.NsEph = new double[] { cg.AdjaX, cg.AdjaY, cg.AdjaZ, 0, 0, 0 };
+                    twoStartOption.MsAnt = new double[] { satTx.Lon, satTx.Lat, 0 };
+                    twoStartOption.NsAnt = new double[] { satNTx.Lon, satNTx.Lat, 0 };
+                    twoStartOption.RefGeod = new double[] { refTx.Lon, refTx.Lat, 0 };
+                    twoStartOption.TargetDto = cg.DtoSx;
+                    twoStartOption.RefDto = cg.YbMain - cg.YbAdja;
+                    twoStartOption.PosLon = item.PosLon;
+                    twoStartOption.PosLat = item.PosLat;
+                    var tsDtoLine = DrawDtoLineHelper.DtoLineXDTwoStart(twoStartOption);
+                    mapControl1.DrawDtoPonit($"双星[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == satNTx.ID)?.Sat}]时差线", tsDtoLine);
+                }
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error($"绘制{posType.GetEnumDisplayName()}时差线失败", ex);
+                DxHelper.MsgBoxHelper.ShowWarning($"绘制{posType.GetEnumDisplayName()}时差线失败,失败信息:{ex.Message}");
+            }
+        }
+        private void DrawDfoLine(PosRes item, EnumPosType posType)
+        {
+            DxHelper.MsgBoxHelper.ShowWarning($"未实现绘制频差线!");
+            return;
+            switch (posType)
+            {
+                case EnumPosType.X1D1CX:
+                case EnumPosType.X2D1:
+                    DrawXDfoLine(item, posType);
+                    break;
+                case EnumPosType.RH:
+                    DrawXDfoLine(item, EnumPosType.X1D1CX);
+                    DrawXDfoLine(item, EnumPosType.X2D1);
+                    break;
+                default:
+                    break;
+            }
+
+        }
+        private async void DrawXDfoLine(PosRes item, EnumPosType posType)
+        {
+            try
+            {
+                List<TxInfo> listTx = new List<TxInfo>();
+                List<SatInfo> listSat = new List<SatInfo>();
+                CgRes cg;
+                using (RHDWContext db = new RHDWContext())
+                {
+                    listTx = db.TxInfos.ToList();
+                    listSat = db.SatInfos.ToList();
+                    cg = await db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefaultAsync();
+
+                }
+                if (cg == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"未找到定位相关的计算[{item.CgResID}]信息");
+                    return;
+                }
+
+                var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
+                if (satTx == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"主星天线信息为空!");
+                    return;
+                }
+                var satNTx = listTx.Find(p => p.TxType == EnumTxType.AdjaSat);
+                if (posType == EnumPosType.X2D1 && satNTx == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"邻星天线信息为空!");
+                    return;
+                }
+                var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
+                if (cdbTx == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"超短波信息为空!");
+                    return;
+                }
+                var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
+                if (refTx == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"参考站信息为空!");
+                    return;
+                }
+                if (posType == EnumPosType.X2D1)
+                {
+                    DfoLineTwoStartOption twoStartOption = new DfoLineTwoStartOption();
+                    twoStartOption.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
+                    twoStartOption.NsEph = new double[] { cg.AdjaX, cg.AdjaY, cg.AdjaZ, 0, 0, 0 };
+                    twoStartOption.MsAnt = new double[] { satTx.Lon, satTx.Lat, 0 };
+                    twoStartOption.NsAnt = new double[] { satNTx.Lon, satNTx.Lat, 0 };
+                    twoStartOption.RefGeod = new double[] { refTx.Lon, refTx.Lat, 0 };
+                    //twoStartOption.TargetDto = cg.DtoSx;
+                    //twoStartOption.RefDto = cg.YbMain - cg.YbAdja;
+                    //twoStartOption.PosLon = item.PosLon;
+                    //twoStartOption.PosLat = item.PosLat;
+                    var tsDtoLine = DrawDfoLineHelper.DtfoLineTwoStart(twoStartOption);
+                    mapControl1.DrawDtoPonit($"双星[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == satNTx.ID)?.Sat}]时差线", tsDtoLine);
+                }
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error($"绘制{posType.GetEnumDisplayName()}频差线失败", ex);
+                DxHelper.MsgBoxHelper.ShowWarning($"绘制{posType.GetEnumDisplayName()}频差线失败,失败信息:{ex.Message}");
+            }
+        }
+        private async void DrawCXLine(PosRes item)
+        {
+            if (!item.CxResID.HasValue)
+            {
+                DxHelper.MsgBoxHelper.ShowWarning($"绘制测向线未有测向编号!");
+                return;
+            }
+            try
+            {
+                List<TxInfo> listTx = new List<TxInfo>();
+                CxRes cx;
+                using (RHDWContext db = new RHDWContext())
+                {
+                    listTx = db.TxInfos.ToList();
+                    cx = await db.CxRes.Where(m => m.ID == item.CxResID.Value).FirstOrDefaultAsync();
+
+                }
+                if (cx == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"未找到定位相关的测向[{item.CxResID.Value}]信息");
+                    return;
+                }
+                var satTx = listTx.Find(p => p.TxType == EnumTxType.Cx);
+                if (satTx == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"测向站信息为空!");
+                    return;
+                }
+                double startdeg =360;
+                double deg = startdeg- cx.Fx;//向北顺时针方向为夹角
+                //计算测向站到定位点之间的距离
+                var km = MapControlEx.CalcLineKm(satTx.Lon, satTx.Lat, item.PosLon, item.PosLat);
+                var endpoint = MapControlEx.CalcSituation(satTx.Lon, satTx.Lat, deg, (km+100) * 1000);
+                List<(double, double)> points = new List<(double, double)>();
+                points.Add((satTx.Lon, satTx.Lat));
+                points.Add((endpoint.Item1, endpoint.Item2));
+                mapControl1.DrawCXLine($"测向线角度:{cx.Fx}°\t\n", points);
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error($"绘制测向线失败", ex);
+                DxHelper.MsgBoxHelper.ShowWarning($"绘制测向线失败,失败信息:{ex.Message}");
+            }
+        }
+    }
 }
+
+
+

+ 486 - 0
XdCxRhDW.App/UserControl/GDOPParam.Designer.cs

@@ -0,0 +1,486 @@
+namespace XdCxRhDW.App.UserControl
+{
+    partial class GDOPParam
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject1 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject2 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject3 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject4 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions2 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject5 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject6 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject7 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject8 = new DevExpress.Utils.SerializableAppearanceObject();
+            this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            this.btnX1D1 = new DevExpress.XtraEditors.SimpleButton();
+            this.txtCapTime = new DevExpress.XtraEditors.DateEdit();
+            this.txtStationLocation1 = new DevExpress.XtraEditors.TextEdit();
+            this.txtRefLocation1 = new DevExpress.XtraEditors.TextEdit();
+            this.txtTleMain = new DevExpress.XtraEditors.SearchLookUpEdit();
+            this.searchLookUpEdit1View = new DevExpress.XtraGrid.Views.Grid.GridView();
+            this.txtTleAdja = new DevExpress.XtraEditors.SearchLookUpEdit();
+            this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+            this.txtDtousErr1 = new DevExpress.XtraEditors.ButtonEdit();
+            this.txtSatLocErr1 = new DevExpress.XtraEditors.ButtonEdit();
+            this.btnClose = new DevExpress.XtraEditors.SimpleButton();
+            this.btnX1D2 = new DevExpress.XtraEditors.SimpleButton();
+            this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            this.layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem9 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem11 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem14 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem13 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            ((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.txtStationLocation1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtRefLocation1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtTleMain.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.searchLookUpEdit1View)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtTleAdja.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtDtousErr1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtSatLocErr1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem8)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem9)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem11)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem14)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem13)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            this.layoutControl1.Controls.Add(this.btnX1D1);
+            this.layoutControl1.Controls.Add(this.txtCapTime);
+            this.layoutControl1.Controls.Add(this.txtStationLocation1);
+            this.layoutControl1.Controls.Add(this.txtRefLocation1);
+            this.layoutControl1.Controls.Add(this.txtTleMain);
+            this.layoutControl1.Controls.Add(this.txtTleAdja);
+            this.layoutControl1.Controls.Add(this.txtDtousErr1);
+            this.layoutControl1.Controls.Add(this.txtSatLocErr1);
+            this.layoutControl1.Controls.Add(this.btnClose);
+            this.layoutControl1.Controls.Add(this.btnX1D2);
+            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(345, 390);
+            this.layoutControl1.TabIndex = 0;
+            this.layoutControl1.Text = "layoutControl1";
+            // 
+            // btnX1D1
+            // 
+            this.btnX1D1.Location = new System.Drawing.Point(117, 317);
+            this.btnX1D1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.btnX1D1.Name = "btnX1D1";
+            this.btnX1D1.Size = new System.Drawing.Size(111, 22);
+            this.btnX1D1.StyleController = this.layoutControl1;
+            this.btnX1D1.TabIndex = 12;
+            this.btnX1D1.Text = "一星一地";
+            this.btnX1D1.Click += new System.EventHandler(this.btnX1D1_Click);
+            // 
+            // txtCapTime
+            // 
+            this.txtCapTime.EditValue = null;
+            this.txtCapTime.Location = new System.Drawing.Point(2, 108);
+            this.txtCapTime.Margin = new System.Windows.Forms.Padding(2);
+            this.txtCapTime.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtCapTime.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtCapTime.Name = "txtCapTime";
+            this.txtCapTime.Properties.AutoHeight = false;
+            this.txtCapTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtCapTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtCapTime.Size = new System.Drawing.Size(341, 22);
+            this.txtCapTime.StyleController = this.layoutControl1;
+            this.txtCapTime.TabIndex = 8;
+            // 
+            // txtStationLocation1
+            // 
+            this.txtStationLocation1.EditValue = "";
+            this.txtStationLocation1.Location = new System.Drawing.Point(2, 152);
+            this.txtStationLocation1.Margin = new System.Windows.Forms.Padding(2);
+            this.txtStationLocation1.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtStationLocation1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtStationLocation1.Name = "txtStationLocation1";
+            this.txtStationLocation1.Properties.AutoHeight = false;
+            this.txtStationLocation1.Size = new System.Drawing.Size(341, 22);
+            this.txtStationLocation1.StyleController = this.layoutControl1;
+            this.txtStationLocation1.TabIndex = 11;
+            this.txtStationLocation1.ToolTip = "经度纬度之间用英文逗号隔开";
+            // 
+            // txtRefLocation1
+            // 
+            this.txtRefLocation1.EditValue = "";
+            this.txtRefLocation1.Location = new System.Drawing.Point(2, 196);
+            this.txtRefLocation1.Margin = new System.Windows.Forms.Padding(2);
+            this.txtRefLocation1.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtRefLocation1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtRefLocation1.Name = "txtRefLocation1";
+            this.txtRefLocation1.Properties.AutoHeight = false;
+            this.txtRefLocation1.Size = new System.Drawing.Size(341, 22);
+            this.txtRefLocation1.StyleController = this.layoutControl1;
+            this.txtRefLocation1.TabIndex = 10;
+            this.txtRefLocation1.ToolTip = "经度纬度之间用英文逗号隔开";
+            // 
+            // txtTleMain
+            // 
+            this.txtTleMain.EditValue = "";
+            this.txtTleMain.Location = new System.Drawing.Point(2, 20);
+            this.txtTleMain.Margin = new System.Windows.Forms.Padding(2);
+            this.txtTleMain.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtTleMain.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtTleMain.Name = "txtTleMain";
+            this.txtTleMain.Properties.AutoHeight = false;
+            this.txtTleMain.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtTleMain.Properties.NullText = "";
+            this.txtTleMain.Properties.PopupSizeable = false;
+            this.txtTleMain.Properties.PopupView = this.searchLookUpEdit1View;
+            this.txtTleMain.Size = new System.Drawing.Size(341, 22);
+            this.txtTleMain.StyleController = this.layoutControl1;
+            this.txtTleMain.TabIndex = 4;
+            this.txtTleMain.ToolTip = "填写卫星的双行根数";
+            // 
+            // searchLookUpEdit1View
+            // 
+            this.searchLookUpEdit1View.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;
+            this.searchLookUpEdit1View.Name = "searchLookUpEdit1View";
+            this.searchLookUpEdit1View.OptionsEditForm.PopupEditFormWidth = 430;
+            this.searchLookUpEdit1View.OptionsSelection.EnableAppearanceFocusedCell = false;
+            this.searchLookUpEdit1View.OptionsView.ShowGroupPanel = false;
+            // 
+            // txtTleAdja
+            // 
+            this.txtTleAdja.EditValue = "";
+            this.txtTleAdja.Location = new System.Drawing.Point(2, 64);
+            this.txtTleAdja.Margin = new System.Windows.Forms.Padding(2);
+            this.txtTleAdja.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtTleAdja.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtTleAdja.Name = "txtTleAdja";
+            this.txtTleAdja.Properties.AutoHeight = false;
+            this.txtTleAdja.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtTleAdja.Properties.NullText = "";
+            this.txtTleAdja.Properties.PopupSizeable = false;
+            this.txtTleAdja.Properties.PopupView = this.gridView1;
+            this.txtTleAdja.Size = new System.Drawing.Size(341, 22);
+            this.txtTleAdja.StyleController = this.layoutControl1;
+            this.txtTleAdja.TabIndex = 5;
+            this.txtTleAdja.ToolTip = "填写卫星的双行根数";
+            // 
+            // gridView1
+            // 
+            this.gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;
+            this.gridView1.Name = "gridView1";
+            this.gridView1.OptionsEditForm.PopupEditFormWidth = 430;
+            this.gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
+            this.gridView1.OptionsView.ShowGroupPanel = false;
+            // 
+            // txtDtousErr1
+            // 
+            this.txtDtousErr1.EditValue = "";
+            this.txtDtousErr1.Location = new System.Drawing.Point(2, 240);
+            this.txtDtousErr1.Margin = new System.Windows.Forms.Padding(2);
+            this.txtDtousErr1.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtDtousErr1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtDtousErr1.Name = "txtDtousErr1";
+            this.txtDtousErr1.Properties.AutoHeight = false;
+            this.txtDtousErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "us", -1, false, true, false, editorButtonImageOptions1, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            this.txtDtousErr1.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            this.txtDtousErr1.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
+            this.txtDtousErr1.Properties.MaskSettings.Set("mask", "f");
+            this.txtDtousErr1.Size = new System.Drawing.Size(341, 22);
+            this.txtDtousErr1.StyleController = this.layoutControl1;
+            this.txtDtousErr1.TabIndex = 6;
+            this.txtDtousErr1.ToolTip = "ECEF坐标X";
+            // 
+            // txtSatLocErr1
+            // 
+            this.txtSatLocErr1.EditValue = "";
+            this.txtSatLocErr1.Location = new System.Drawing.Point(2, 284);
+            this.txtSatLocErr1.Margin = new System.Windows.Forms.Padding(2);
+            this.txtSatLocErr1.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtSatLocErr1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtSatLocErr1.Name = "txtSatLocErr1";
+            this.txtSatLocErr1.Properties.AutoHeight = false;
+            this.txtSatLocErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "m", -1, false, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            this.txtSatLocErr1.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            this.txtSatLocErr1.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
+            this.txtSatLocErr1.Properties.MaskSettings.Set("mask", "f");
+            this.txtSatLocErr1.Size = new System.Drawing.Size(341, 22);
+            this.txtSatLocErr1.StyleController = this.layoutControl1;
+            this.txtSatLocErr1.TabIndex = 6;
+            this.txtSatLocErr1.ToolTip = "ECEF坐标X";
+            // 
+            // btnClose
+            // 
+            this.btnClose.Location = new System.Drawing.Point(2, 317);
+            this.btnClose.Margin = new System.Windows.Forms.Padding(2);
+            this.btnClose.Name = "btnClose";
+            this.btnClose.Size = new System.Drawing.Size(111, 22);
+            this.btnClose.StyleController = this.layoutControl1;
+            this.btnClose.TabIndex = 13;
+            this.btnClose.Text = "关闭";
+            this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
+            // 
+            // btnX1D2
+            // 
+            this.btnX1D2.Location = new System.Drawing.Point(232, 317);
+            this.btnX1D2.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.btnX1D2.Name = "btnX1D2";
+            this.btnX1D2.Size = new System.Drawing.Size(111, 22);
+            this.btnX1D2.StyleController = this.layoutControl1;
+            this.btnX1D2.TabIndex = 12;
+            this.btnX1D2.Text = "两星一地";
+            this.btnX1D2.Click += new System.EventHandler(this.btnX1D2_Click);
+            // 
+            // Root
+            // 
+            this.Root.GroupBordersVisible = false;
+            this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+            this.layoutControlItem8,
+            this.layoutControlItem9,
+            this.layoutControlItem11,
+            this.layoutControlItem14,
+            this.layoutControlItem13,
+            this.layoutControlItem4,
+            this.layoutControlItem5,
+            this.layoutControlItem1,
+            this.emptySpaceItem1,
+            this.layoutControlItem2,
+            this.layoutControlItem3});
+            this.Root.Name = "Root";
+            this.Root.Size = new System.Drawing.Size(345, 390);
+            this.Root.TextVisible = false;
+            // 
+            // layoutControlItem8
+            // 
+            this.layoutControlItem8.Control = this.txtTleMain;
+            this.layoutControlItem8.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem8.Location = new System.Drawing.Point(0, 0);
+            this.layoutControlItem8.Name = "layoutControlItem8";
+            this.layoutControlItem8.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem8.Text = "主星星历";
+            this.layoutControlItem8.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem8.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem9
+            // 
+            this.layoutControlItem9.Control = this.txtTleAdja;
+            this.layoutControlItem9.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem9.Location = new System.Drawing.Point(0, 44);
+            this.layoutControlItem9.Name = "layoutControlItem9";
+            this.layoutControlItem9.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem9.Text = "邻星星历";
+            this.layoutControlItem9.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem9.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem11
+            // 
+            this.layoutControlItem11.Control = this.txtCapTime;
+            this.layoutControlItem11.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem11.Location = new System.Drawing.Point(0, 88);
+            this.layoutControlItem11.Name = "layoutControlItem11";
+            this.layoutControlItem11.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem11.Text = "采集时刻";
+            this.layoutControlItem11.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem11.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, 176);
+            this.layoutControlItem14.Name = "layoutControlItem14";
+            this.layoutControlItem14.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem14.Text = "参考站经纬度";
+            this.layoutControlItem14.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem14.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem13
+            // 
+            this.layoutControlItem13.Control = this.txtStationLocation1;
+            this.layoutControlItem13.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem13.Location = new System.Drawing.Point(0, 132);
+            this.layoutControlItem13.Name = "layoutControlItem13";
+            this.layoutControlItem13.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem13.Text = "超短站经纬度";
+            this.layoutControlItem13.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem13.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem4
+            // 
+            this.layoutControlItem4.Control = this.txtDtousErr1;
+            this.layoutControlItem4.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem4.CustomizationFormText = "低轨卫星X";
+            this.layoutControlItem4.Location = new System.Drawing.Point(0, 220);
+            this.layoutControlItem4.Name = "layoutControlItem4";
+            this.layoutControlItem4.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem4.Text = "时差误差";
+            this.layoutControlItem4.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem4.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem5
+            // 
+            this.layoutControlItem5.Control = this.txtSatLocErr1;
+            this.layoutControlItem5.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem5.CustomizationFormText = "低轨卫星X";
+            this.layoutControlItem5.Location = new System.Drawing.Point(0, 264);
+            this.layoutControlItem5.Name = "layoutControlItem5";
+            this.layoutControlItem5.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem5.Text = "星历位置误差";
+            this.layoutControlItem5.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem5.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem1
+            // 
+            this.layoutControlItem1.Control = this.btnX1D1;
+            this.layoutControlItem1.Location = new System.Drawing.Point(115, 308);
+            this.layoutControlItem1.Name = "layoutControlItem1";
+            this.layoutControlItem1.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
+            this.layoutControlItem1.Size = new System.Drawing.Size(115, 33);
+            this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem1.TextVisible = false;
+            // 
+            // emptySpaceItem1
+            // 
+            this.emptySpaceItem1.AllowHotTrack = false;
+            this.emptySpaceItem1.Location = new System.Drawing.Point(0, 341);
+            this.emptySpaceItem1.Name = "emptySpaceItem1";
+            this.emptySpaceItem1.Size = new System.Drawing.Size(345, 49);
+            this.emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0);
+            // 
+            // layoutControlItem2
+            // 
+            this.layoutControlItem2.Control = this.btnClose;
+            this.layoutControlItem2.Location = new System.Drawing.Point(0, 308);
+            this.layoutControlItem2.Name = "layoutControlItem2";
+            this.layoutControlItem2.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
+            this.layoutControlItem2.Size = new System.Drawing.Size(115, 33);
+            this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem2.TextVisible = false;
+            // 
+            // layoutControlItem3
+            // 
+            this.layoutControlItem3.Control = this.btnX1D2;
+            this.layoutControlItem3.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem3.CustomizationFormText = "layoutControlItem1";
+            this.layoutControlItem3.Location = new System.Drawing.Point(230, 308);
+            this.layoutControlItem3.Name = "layoutControlItem3";
+            this.layoutControlItem3.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
+            this.layoutControlItem3.Size = new System.Drawing.Size(115, 33);
+            this.layoutControlItem3.Text = "layoutControlItem1";
+            this.layoutControlItem3.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem3.TextVisible = false;
+            // 
+            // GDOPParam
+            // 
+            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 = "GDOPParam";
+            this.Size = new System.Drawing.Size(345, 390);
+            ((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.txtStationLocation1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtRefLocation1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtTleMain.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.searchLookUpEdit1View)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtTleAdja.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtDtousErr1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtSatLocErr1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem8)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem9)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem11)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem14)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem13)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraEditors.DateEdit txtCapTime;
+        private DevExpress.XtraEditors.TextEdit txtStationLocation1;
+        private DevExpress.XtraEditors.TextEdit txtRefLocation1;
+        private DevExpress.XtraEditors.SearchLookUpEdit txtTleMain;
+        private DevExpress.XtraGrid.Views.Grid.GridView searchLookUpEdit1View;
+        private DevExpress.XtraEditors.SearchLookUpEdit txtTleAdja;
+        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+        private DevExpress.XtraEditors.ButtonEdit txtDtousErr1;
+        private DevExpress.XtraEditors.ButtonEdit txtSatLocErr1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem9;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem11;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem14;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem13;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
+        private DevExpress.XtraEditors.SimpleButton btnX1D1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraEditors.SimpleButton btnClose;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraEditors.SimpleButton btnX1D2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+    }
+}

+ 172 - 0
XdCxRhDW.App/UserControl/GDOPParam.cs

@@ -0,0 +1,172 @@
+using DevExpress.XtraMap;
+using ExtensionsDev;
+using System;
+using System.Data;
+using System.Linq;
+using XdCxRhDW.App.Model;
+using XdCxRhDW.App.EFContext;
+using XdCxRhDW.App.Api.GDOP误差椭圆;
+using System.Collections.Generic;
+namespace XdCxRhDW.App.UserControl
+{
+    public partial class GDOPParam : DevExpress.XtraEditors.XtraUserControl
+    {
+        public MapControl mapControl1;
+        public GDOP星地接口 Model => new GDOP星地接口()
+        {
+            TleMain = txtTleMain.Text.Trim(),
+            TleAdja = txtTleAdja.Text.Trim(),
+            CapTime = txtCapTime.DateTime,
+            StationLon = Convert.ToDouble(txtStationLocation1.Text.Replace(",", ",").Split(',')[0].Trim()),
+            StationLat = Convert.ToDouble(txtStationLocation1.Text.Replace(",", ",").Split(',')[1].Trim()),
+            RefLon = Convert.ToDouble(txtRefLocation1.Text.Replace(",", ",").Split(',')[0].Trim()),
+            RefLat = Convert.ToDouble(txtRefLocation1.Text.Replace(",", ",").Split(',')[1].Trim()),
+            DtousErr = Convert.ToDouble(txtDtousErr1.Text),
+            SatLocErr = Convert.ToDouble(txtSatLocErr1.Text),
+        };
+        public GDOPParam(DateTime sigTime)
+        {
+            InitializeComponent();
+            txtCapTime.UseDefault();
+            txtTleMain.UseDoubleClickToSelectAll();
+            txtTleAdja.UseDoubleClickToSelectAll();
+            txtStationLocation1.UseDoubleClickToSelectAll();
+            txtRefLocation1.UseDoubleClickToSelectAll();
+            this.txtCapTime.DateTime = sigTime;
+            this.txtDtousErr1.EditValue = 1;
+            this.txtSatLocErr1.EditValue = 1000;
+            List<string> xlall = new List<string>();
+            string mainTle = string.Empty;
+            string adjaTle = string.Empty;
+            using (RHDWContext db = new RHDWContext())
+            {
+                var sats = db.SatInfos.ToList();
+
+                var list = db.TxInfos.ToList();
+                var mainTx = list.Find(p => p.TxType == EnumTxType.MainSat);
+                var adjaTx = list.Find(p => p.TxType == EnumTxType.AdjaSat);
+                var cdbTx = list.Find(p => p.TxType == EnumTxType.Cdb);
+                if (cdbTx != null)
+                {
+                    this.txtStationLocation1.Text = $"{cdbTx.Lon},{cdbTx.Lat}";
+                }
+                var cxTx = list.Find(p => p.TxType == EnumTxType.Cx);
+                var refLoc = list.Find(p => p.TxType == EnumTxType.Ref);
+                if (refLoc != null)
+                {
+                    this.txtRefLocation1.Text = $"{refLoc.Lon},{refLoc.Lat}";
+                }
+                var xlList = db.XlInfos.OrderBy(p => p.SatName).OrderByDescending(p => p.TimeBJ).ToList();
+                xlall.AddRange(xlList.Select(m => m.TwoLine));
+                if (xlall.Count() == 0) return;
+                if (mainTx != null && xlList.Any(m => m.SatCode == mainTx.SatInfo.SatCode))
+                {
+                    mainTle = xlList.First(m => m.SatCode == mainTx.SatInfo.SatCode).TwoLine;
+                }
+                else
+                {
+                    mainTle = xlList.First().TwoLine;
+                }
+
+                if (adjaTx != null && xlList.Any(m => m.SatCode == adjaTx.SatInfo.SatCode))
+                {
+                    adjaTle = xlList.First(m => m.SatCode == adjaTx.SatInfo.SatCode).TwoLine;
+                }
+                else
+                {
+                    adjaTle = xlList.First().TwoLine;
+                }
+            }
+
+
+            txtTleMain.UseDefault().SetStringData(xlall).Text = mainTle;
+            txtTleAdja.UseDefault().SetStringData(xlall).Text = adjaTle;
+        }
+
+        private void btnClose_Click(object sender, EventArgs e)
+        {
+            DxHelper.PopupHelper.HidePopup(this);
+        }
+
+        private void btnX1D1_Click(object sender, EventArgs e)
+        {
+            mapControl1.ClearMap();
+            var (listSat, data) = GdopHelper.Gdop2Sat1DRef(Model.TleMain, Model.TleAdja, Model.CapTime, new double[] { Model.StationLon, Model.StationLat, 0 },
+                              new double[] { Model.RefLon, Model.RefLat, 0 }, Model.DtousErr, Model.SatLocErr);
+            if (data == null)
+            {
+                return;
+            }
+            foreach (var errLins in data)//画GDOP
+            {
+                var mapDots = errLins.MapDots.Select(p => p).Select(p => (p.Lon, p.Lat));
+                mapControl1.DrawGdopLineTwo(errLins.ErrDistanceKm, mapDots, 1);
+            }
+        }
+
+        private void btnX1D2_Click(object sender, EventArgs e)
+        {
+            mapControl1.ClearMap();
+            var (listSat, data) = GdopHelper.Gdop2Sat1DRef(Model.TleMain, Model.TleAdja, Model.CapTime, new double[] { Model.StationLon, Model.StationLat, 0 },
+                              new double[] { Model.RefLon, Model.RefLat, 0 }, Model.DtousErr, Model.SatLocErr);
+            if (data == null)
+            {
+                return;
+            }
+            foreach (var errLins in data)//画GDOP
+            {
+                var mapDots = errLins.MapDots.Select(p => p).Select(p => (p.Lon, p.Lat));
+                mapControl1.DrawGdopLineTwo(errLins.ErrDistanceKm, mapDots, 1);
+            }
+        }
+    }
+    public class GDOP星地接口
+    {
+        /// <summary>
+        /// 主星星历(Tle)
+        /// </summary>
+        public string TleMain { get; set; }
+
+        /// <summary>
+        /// 邻星星历(Tle)
+        /// </summary>
+        public string TleAdja { get; set; }
+
+        /// <summary>
+        /// 采集时刻
+        /// </summary>
+        public DateTime CapTime { get; set; }
+
+        /// <summary>
+        /// 超短接收站-经度
+        /// </summary>
+        public double StationLon { get; set; }
+
+        /// <summary>
+        /// 超短接收站-纬度
+        /// </summary>
+        public double StationLat { get; set; }
+
+
+        /// <summary>
+        /// 参考站位置经度
+        /// </summary>
+        public double RefLon { get; set; }
+
+        /// <summary>
+        /// 参考站位置纬度
+        /// </summary>
+        public double RefLat { get; set; }
+
+        /// <summary>
+        /// 时差误差(单位us)
+        /// </summary>
+        public double DtousErr { get; set; } = 1;
+
+        /// <summary>
+        /// 星历位置误差(单位米)
+        /// </summary>
+        public double SatLocErr { get; set; } = 10000;
+
+    }
+}

+ 120 - 0
XdCxRhDW.App/UserControl/GDOPParam.resx

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

+ 402 - 0
XdCxRhDW.App/UserControl/X1D1GDOPParam.Designer.cs

@@ -0,0 +1,402 @@
+namespace XdCxRhDW.App.UserControl
+{
+    partial class X1D1GDOPParam
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject1 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject2 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject3 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject4 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions2 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject5 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject6 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject7 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject8 = new DevExpress.Utils.SerializableAppearanceObject();
+            this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            this.btnOK = new DevExpress.XtraEditors.SimpleButton();
+            this.txtCapTime = new DevExpress.XtraEditors.DateEdit();
+            this.txtStationLocation1 = new DevExpress.XtraEditors.TextEdit();
+            this.txtRefLocation1 = new DevExpress.XtraEditors.TextEdit();
+            this.txtTleMain = new DevExpress.XtraEditors.SearchLookUpEdit();
+            this.searchLookUpEdit1View = new DevExpress.XtraGrid.Views.Grid.GridView();
+            this.txtDtousErr1 = new DevExpress.XtraEditors.ButtonEdit();
+            this.txtSatLocErr1 = new DevExpress.XtraEditors.ButtonEdit();
+            this.btnClose = new DevExpress.XtraEditors.SimpleButton();
+            this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            this.layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem11 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem14 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem13 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            ((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.txtStationLocation1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtRefLocation1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtTleMain.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.searchLookUpEdit1View)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtDtousErr1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtSatLocErr1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem8)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem11)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem14)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem13)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            this.layoutControl1.Controls.Add(this.btnOK);
+            this.layoutControl1.Controls.Add(this.txtCapTime);
+            this.layoutControl1.Controls.Add(this.txtStationLocation1);
+            this.layoutControl1.Controls.Add(this.txtRefLocation1);
+            this.layoutControl1.Controls.Add(this.txtTleMain);
+            this.layoutControl1.Controls.Add(this.txtDtousErr1);
+            this.layoutControl1.Controls.Add(this.txtSatLocErr1);
+            this.layoutControl1.Controls.Add(this.btnClose);
+            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(345, 336);
+            this.layoutControl1.TabIndex = 0;
+            this.layoutControl1.Text = "layoutControl1";
+            // 
+            // btnOK
+            // 
+            this.btnOK.Location = new System.Drawing.Point(174, 273);
+            this.btnOK.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.btnOK.Name = "btnOK";
+            this.btnOK.Size = new System.Drawing.Size(169, 22);
+            this.btnOK.StyleController = this.layoutControl1;
+            this.btnOK.TabIndex = 12;
+            this.btnOK.Text = "确定";
+            this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+            // 
+            // txtCapTime
+            // 
+            this.txtCapTime.EditValue = null;
+            this.txtCapTime.Location = new System.Drawing.Point(2, 64);
+            this.txtCapTime.Margin = new System.Windows.Forms.Padding(2);
+            this.txtCapTime.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtCapTime.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtCapTime.Name = "txtCapTime";
+            this.txtCapTime.Properties.AutoHeight = false;
+            this.txtCapTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtCapTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtCapTime.Size = new System.Drawing.Size(341, 22);
+            this.txtCapTime.StyleController = this.layoutControl1;
+            this.txtCapTime.TabIndex = 8;
+            // 
+            // txtStationLocation1
+            // 
+            this.txtStationLocation1.EditValue = "";
+            this.txtStationLocation1.Location = new System.Drawing.Point(2, 108);
+            this.txtStationLocation1.Margin = new System.Windows.Forms.Padding(2);
+            this.txtStationLocation1.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtStationLocation1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtStationLocation1.Name = "txtStationLocation1";
+            this.txtStationLocation1.Properties.AutoHeight = false;
+            this.txtStationLocation1.Size = new System.Drawing.Size(341, 22);
+            this.txtStationLocation1.StyleController = this.layoutControl1;
+            this.txtStationLocation1.TabIndex = 11;
+            this.txtStationLocation1.ToolTip = "经度纬度之间用英文逗号隔开";
+            // 
+            // txtRefLocation1
+            // 
+            this.txtRefLocation1.EditValue = "";
+            this.txtRefLocation1.Location = new System.Drawing.Point(2, 152);
+            this.txtRefLocation1.Margin = new System.Windows.Forms.Padding(2);
+            this.txtRefLocation1.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtRefLocation1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtRefLocation1.Name = "txtRefLocation1";
+            this.txtRefLocation1.Properties.AutoHeight = false;
+            this.txtRefLocation1.Size = new System.Drawing.Size(341, 22);
+            this.txtRefLocation1.StyleController = this.layoutControl1;
+            this.txtRefLocation1.TabIndex = 10;
+            this.txtRefLocation1.ToolTip = "经度纬度之间用英文逗号隔开";
+            // 
+            // txtTleMain
+            // 
+            this.txtTleMain.EditValue = "";
+            this.txtTleMain.Location = new System.Drawing.Point(2, 20);
+            this.txtTleMain.Margin = new System.Windows.Forms.Padding(2);
+            this.txtTleMain.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtTleMain.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtTleMain.Name = "txtTleMain";
+            this.txtTleMain.Properties.AutoHeight = false;
+            this.txtTleMain.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtTleMain.Properties.NullText = "";
+            this.txtTleMain.Properties.PopupSizeable = false;
+            this.txtTleMain.Properties.PopupView = this.searchLookUpEdit1View;
+            this.txtTleMain.Size = new System.Drawing.Size(341, 22);
+            this.txtTleMain.StyleController = this.layoutControl1;
+            this.txtTleMain.TabIndex = 4;
+            this.txtTleMain.ToolTip = "填写卫星的双行根数";
+            // 
+            // searchLookUpEdit1View
+            // 
+            this.searchLookUpEdit1View.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;
+            this.searchLookUpEdit1View.Name = "searchLookUpEdit1View";
+            this.searchLookUpEdit1View.OptionsEditForm.PopupEditFormWidth = 430;
+            this.searchLookUpEdit1View.OptionsSelection.EnableAppearanceFocusedCell = false;
+            this.searchLookUpEdit1View.OptionsView.ShowGroupPanel = false;
+            // 
+            // txtDtousErr1
+            // 
+            this.txtDtousErr1.EditValue = "";
+            this.txtDtousErr1.Location = new System.Drawing.Point(2, 196);
+            this.txtDtousErr1.Margin = new System.Windows.Forms.Padding(2);
+            this.txtDtousErr1.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtDtousErr1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtDtousErr1.Name = "txtDtousErr1";
+            this.txtDtousErr1.Properties.AutoHeight = false;
+            this.txtDtousErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "us", -1, false, true, false, editorButtonImageOptions1, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            this.txtDtousErr1.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            this.txtDtousErr1.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
+            this.txtDtousErr1.Properties.MaskSettings.Set("mask", "f");
+            this.txtDtousErr1.Size = new System.Drawing.Size(341, 22);
+            this.txtDtousErr1.StyleController = this.layoutControl1;
+            this.txtDtousErr1.TabIndex = 6;
+            this.txtDtousErr1.ToolTip = "ECEF坐标X";
+            // 
+            // txtSatLocErr1
+            // 
+            this.txtSatLocErr1.EditValue = "";
+            this.txtSatLocErr1.Location = new System.Drawing.Point(2, 240);
+            this.txtSatLocErr1.Margin = new System.Windows.Forms.Padding(2);
+            this.txtSatLocErr1.MaximumSize = new System.Drawing.Size(0, 22);
+            this.txtSatLocErr1.MinimumSize = new System.Drawing.Size(0, 22);
+            this.txtSatLocErr1.Name = "txtSatLocErr1";
+            this.txtSatLocErr1.Properties.AutoHeight = false;
+            this.txtSatLocErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "m", -1, false, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            this.txtSatLocErr1.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            this.txtSatLocErr1.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
+            this.txtSatLocErr1.Properties.MaskSettings.Set("mask", "f");
+            this.txtSatLocErr1.Size = new System.Drawing.Size(341, 22);
+            this.txtSatLocErr1.StyleController = this.layoutControl1;
+            this.txtSatLocErr1.TabIndex = 6;
+            this.txtSatLocErr1.ToolTip = "ECEF坐标X";
+            // 
+            // btnClose
+            // 
+            this.btnClose.Location = new System.Drawing.Point(2, 273);
+            this.btnClose.Margin = new System.Windows.Forms.Padding(2);
+            this.btnClose.Name = "btnClose";
+            this.btnClose.Size = new System.Drawing.Size(168, 22);
+            this.btnClose.StyleController = this.layoutControl1;
+            this.btnClose.TabIndex = 13;
+            this.btnClose.Text = "关闭";
+            this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
+            // 
+            // Root
+            // 
+            this.Root.GroupBordersVisible = false;
+            this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+            this.layoutControlItem8,
+            this.layoutControlItem11,
+            this.layoutControlItem14,
+            this.layoutControlItem13,
+            this.layoutControlItem4,
+            this.layoutControlItem5,
+            this.layoutControlItem1,
+            this.emptySpaceItem1,
+            this.layoutControlItem2});
+            this.Root.Name = "Root";
+            this.Root.Size = new System.Drawing.Size(345, 336);
+            this.Root.TextVisible = false;
+            // 
+            // layoutControlItem8
+            // 
+            this.layoutControlItem8.Control = this.txtTleMain;
+            this.layoutControlItem8.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem8.Location = new System.Drawing.Point(0, 0);
+            this.layoutControlItem8.Name = "layoutControlItem8";
+            this.layoutControlItem8.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem8.Text = "主星星历";
+            this.layoutControlItem8.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem8.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem11
+            // 
+            this.layoutControlItem11.Control = this.txtCapTime;
+            this.layoutControlItem11.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem11.Location = new System.Drawing.Point(0, 44);
+            this.layoutControlItem11.Name = "layoutControlItem11";
+            this.layoutControlItem11.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem11.Text = "采集时刻";
+            this.layoutControlItem11.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem11.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, 132);
+            this.layoutControlItem14.Name = "layoutControlItem14";
+            this.layoutControlItem14.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem14.Text = "参考站经纬度";
+            this.layoutControlItem14.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem14.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem13
+            // 
+            this.layoutControlItem13.Control = this.txtStationLocation1;
+            this.layoutControlItem13.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem13.Location = new System.Drawing.Point(0, 88);
+            this.layoutControlItem13.Name = "layoutControlItem13";
+            this.layoutControlItem13.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem13.Text = "超短站经纬度";
+            this.layoutControlItem13.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem13.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem4
+            // 
+            this.layoutControlItem4.Control = this.txtDtousErr1;
+            this.layoutControlItem4.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem4.CustomizationFormText = "低轨卫星X";
+            this.layoutControlItem4.Location = new System.Drawing.Point(0, 176);
+            this.layoutControlItem4.Name = "layoutControlItem4";
+            this.layoutControlItem4.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem4.Text = "时差误差";
+            this.layoutControlItem4.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem4.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem5
+            // 
+            this.layoutControlItem5.Control = this.txtSatLocErr1;
+            this.layoutControlItem5.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
+            this.layoutControlItem5.CustomizationFormText = "低轨卫星X";
+            this.layoutControlItem5.Location = new System.Drawing.Point(0, 220);
+            this.layoutControlItem5.Name = "layoutControlItem5";
+            this.layoutControlItem5.Size = new System.Drawing.Size(345, 44);
+            this.layoutControlItem5.Text = "星历位置误差";
+            this.layoutControlItem5.TextLocation = DevExpress.Utils.Locations.Top;
+            this.layoutControlItem5.TextSize = new System.Drawing.Size(72, 14);
+            // 
+            // layoutControlItem1
+            // 
+            this.layoutControlItem1.Control = this.btnOK;
+            this.layoutControlItem1.Location = new System.Drawing.Point(172, 264);
+            this.layoutControlItem1.Name = "layoutControlItem1";
+            this.layoutControlItem1.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
+            this.layoutControlItem1.Size = new System.Drawing.Size(173, 33);
+            this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem1.TextVisible = false;
+            // 
+            // emptySpaceItem1
+            // 
+            this.emptySpaceItem1.AllowHotTrack = false;
+            this.emptySpaceItem1.Location = new System.Drawing.Point(0, 297);
+            this.emptySpaceItem1.Name = "emptySpaceItem1";
+            this.emptySpaceItem1.Size = new System.Drawing.Size(345, 39);
+            this.emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0);
+            // 
+            // layoutControlItem2
+            // 
+            this.layoutControlItem2.Control = this.btnClose;
+            this.layoutControlItem2.Location = new System.Drawing.Point(0, 264);
+            this.layoutControlItem2.Name = "layoutControlItem2";
+            this.layoutControlItem2.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
+            this.layoutControlItem2.Size = new System.Drawing.Size(172, 33);
+            this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem2.TextVisible = false;
+            // 
+            // X1D1GDOPParam
+            // 
+            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 = "X1D1GDOPParam";
+            this.Size = new System.Drawing.Size(345, 336);
+            ((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.txtStationLocation1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtRefLocation1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtTleMain.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.searchLookUpEdit1View)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtDtousErr1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtSatLocErr1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem8)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem11)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem14)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem13)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraEditors.DateEdit txtCapTime;
+        private DevExpress.XtraEditors.TextEdit txtStationLocation1;
+        private DevExpress.XtraEditors.TextEdit txtRefLocation1;
+        private DevExpress.XtraEditors.SearchLookUpEdit txtTleMain;
+        private DevExpress.XtraGrid.Views.Grid.GridView searchLookUpEdit1View;
+        private DevExpress.XtraEditors.ButtonEdit txtDtousErr1;
+        private DevExpress.XtraEditors.ButtonEdit txtSatLocErr1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem11;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem14;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem13;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
+        private DevExpress.XtraEditors.SimpleButton btnOK;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraEditors.SimpleButton btnClose;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+    }
+}

+ 149 - 0
XdCxRhDW.App/UserControl/X1D1GDOPParam.cs

@@ -0,0 +1,149 @@
+using DevExpress.XtraMap;
+using ExtensionsDev;
+using System;
+using System.Data;
+using System.Linq;
+using XdCxRhDW.App.Model;
+using XdCxRhDW.App.EFContext;
+using XdCxRhDW.App.Api.GDOP误差椭圆;
+using System.Collections.Generic;
+namespace XdCxRhDW.App.UserControl
+{
+    public partial class X1D1GDOPParam : DevExpress.XtraEditors.XtraUserControl
+    {
+        public MapControl mapControl1;
+        public GDOP星地一星一地接口 Model => new GDOP星地一星一地接口()
+        {
+            TleMain = txtTleMain.Text.Trim(),
+            CapTime = txtCapTime.DateTime,
+            StationLon = Convert.ToDouble(txtStationLocation1.Text.Replace(",", ",").Split(',')[0].Trim()),
+            StationLat = Convert.ToDouble(txtStationLocation1.Text.Replace(",", ",").Split(',')[1].Trim()),
+            RefLon = Convert.ToDouble(txtRefLocation1.Text.Replace(",", ",").Split(',')[0].Trim()),
+            RefLat = Convert.ToDouble(txtRefLocation1.Text.Replace(",", ",").Split(',')[1].Trim()),
+            DtousErr = Convert.ToDouble(txtDtousErr1.Text),
+            SatLocErr = Convert.ToDouble(txtSatLocErr1.Text),
+        };
+        public X1D1GDOPParam(DateTime sigTime)
+        {
+            InitializeComponent();
+            txtCapTime.UseDefault();
+            txtTleMain.UseDoubleClickToSelectAll();
+            txtStationLocation1.UseDoubleClickToSelectAll();
+            txtRefLocation1.UseDoubleClickToSelectAll();
+            this.txtCapTime.DateTime = sigTime;
+            this.txtDtousErr1.EditValue = 1;
+            this.txtSatLocErr1.EditValue = 1000;
+            List<string> xlall = new List<string>();
+            string mainTle = string.Empty;
+            string adjaTle = string.Empty;
+            using (RHDWContext db = new RHDWContext())
+            {
+                var sats = db.SatInfos.ToList();
+
+                var list = db.TxInfos.ToList();
+                var mainTx = list.Find(p => p.TxType == EnumTxType.MainSat);
+                var adjaTx = list.Find(p => p.TxType == EnumTxType.AdjaSat);
+                var cdbTx = list.Find(p => p.TxType == EnumTxType.Cdb);
+                if (cdbTx != null)
+                {
+                    this.txtStationLocation1.Text = $"{cdbTx.Lon},{cdbTx.Lat}";
+                }
+                var cxTx = list.Find(p => p.TxType == EnumTxType.Cx);
+                var refLoc = list.Find(p => p.TxType == EnumTxType.Ref);
+                if (refLoc != null)
+                {
+                    this.txtRefLocation1.Text = $"{refLoc.Lon},{refLoc.Lat}";
+                }
+                var xlList = db.XlInfos.OrderBy(p => p.SatName).OrderByDescending(p => p.TimeBJ).ToList();
+                xlall.AddRange(xlList.Select(m => m.TwoLine));
+                if (xlall.Count() == 0) return;
+                if (mainTx != null && xlList.Any(m => m.SatCode == mainTx.SatInfo.SatCode))
+                {
+                    mainTle = xlList.First(m => m.SatCode == mainTx.SatInfo.SatCode).TwoLine;
+                }
+                else
+                {
+                    mainTle = xlList.First().TwoLine;
+                }
+
+                if (adjaTx != null && xlList.Any(m => m.SatCode == adjaTx.SatInfo.SatCode))
+                {
+                    adjaTle = xlList.First(m => m.SatCode == adjaTx.SatInfo.SatCode).TwoLine;
+                }
+                else
+                {
+                    adjaTle = xlList.First().TwoLine;
+                }
+            }
+
+
+            txtTleMain.UseDefault().SetStringData(xlall).Text = mainTle;
+        }
+
+
+
+        private void btnOK_Click(object sender, EventArgs e)
+        {
+            mapControl1.ClearMap();
+            var (listSat, data) = GdopHelper.Gdop2Sat1DRef(Model.TleMain,"", Model.CapTime, new double[] { Model.StationLon, Model.StationLat, 0 },
+                              new double[] { Model.RefLon, Model.RefLat, 0 }, Model.DtousErr, Model.SatLocErr);
+            if (data == null)
+            {
+                return;
+            }
+            foreach (var errLins in data)//画GDOP
+            {
+                var mapDots = errLins.MapDots.Select(p => p).Select(p => (p.Lon, p.Lat));
+                mapControl1.DrawGdopLineTwo(errLins.ErrDistanceKm, mapDots, 1);
+            }
+        }
+        private void btnClose_Click(object sender, EventArgs e)
+        {
+            DxHelper.PopupHelper.HidePopup(this);
+        }
+    }
+    public class GDOP星地一星一地接口
+    {
+        /// <summary>
+        /// 主星星历(Tle)
+        /// </summary>
+        public string TleMain { get; set; }
+
+        /// <summary>
+        /// 采集时刻
+        /// </summary>
+        public DateTime CapTime { get; set; }
+
+        /// <summary>
+        /// 超短接收站-经度
+        /// </summary>
+        public double StationLon { get; set; }
+
+        /// <summary>
+        /// 超短接收站-纬度
+        /// </summary>
+        public double StationLat { get; set; }
+
+
+        /// <summary>
+        /// 参考站位置经度
+        /// </summary>
+        public double RefLon { get; set; }
+
+        /// <summary>
+        /// 参考站位置纬度
+        /// </summary>
+        public double RefLat { get; set; }
+
+        /// <summary>
+        /// 时差误差(单位us)
+        /// </summary>
+        public double DtousErr { get; set; } = 1;
+
+        /// <summary>
+        /// 星历位置误差(单位米)
+        /// </summary>
+        public double SatLocErr { get; set; } = 10000;
+
+    }
+}

+ 120 - 0
XdCxRhDW.App/UserControl/X1D1GDOPParam.resx

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

+ 17 - 29
XdCxRhDW.App/UserControl/X2D1GDOPParam.Designer.cs

@@ -28,16 +28,16 @@
         /// </summary>
         private void InitializeComponent()
         {
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions3 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject9 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject10 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject11 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject12 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject1 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject2 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject3 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject4 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions2 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject5 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject6 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject7 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject8 = new DevExpress.Utils.SerializableAppearanceObject();
             this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
             this.btnOK = new DevExpress.XtraEditors.SimpleButton();
             this.txtCapTime = new DevExpress.XtraEditors.DateEdit();
@@ -60,7 +60,6 @@
             this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
             this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
-            this.emptySpaceItem2 = new DevExpress.XtraLayout.EmptySpaceItem();
             this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
             this.layoutControl1.SuspendLayout();
@@ -84,7 +83,6 @@
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
             this.SuspendLayout();
             // 
@@ -105,7 +103,7 @@
             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(345, 557);
+            this.layoutControl1.Size = new System.Drawing.Size(345, 390);
             this.layoutControl1.TabIndex = 0;
             this.layoutControl1.Text = "layoutControl1";
             // 
@@ -229,7 +227,7 @@
             this.txtDtousErr1.Name = "txtDtousErr1";
             this.txtDtousErr1.Properties.AutoHeight = false;
             this.txtDtousErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "us", -1, false, true, false, editorButtonImageOptions1, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "us", -1, false, true, false, editorButtonImageOptions3, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject9, serializableAppearanceObject10, serializableAppearanceObject11, serializableAppearanceObject12, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
             this.txtDtousErr1.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
             this.txtDtousErr1.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
             this.txtDtousErr1.Properties.MaskSettings.Set("mask", "f");
@@ -248,7 +246,7 @@
             this.txtSatLocErr1.Name = "txtSatLocErr1";
             this.txtSatLocErr1.Properties.AutoHeight = false;
             this.txtSatLocErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "m", -1, false, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            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.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
             this.txtSatLocErr1.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
             this.txtSatLocErr1.Properties.MaskSettings.Set("mask", "f");
@@ -259,7 +257,7 @@
             // 
             // btnClose
             // 
-            this.btnClose.Location = new System.Drawing.Point(2, 320);
+            this.btnClose.Location = new System.Drawing.Point(2, 317);
             this.btnClose.Margin = new System.Windows.Forms.Padding(2);
             this.btnClose.Name = "btnClose";
             this.btnClose.Size = new System.Drawing.Size(168, 22);
@@ -281,10 +279,9 @@
             this.layoutControlItem5,
             this.layoutControlItem1,
             this.emptySpaceItem1,
-            this.emptySpaceItem2,
             this.layoutControlItem2});
             this.Root.Name = "Root";
-            this.Root.Size = new System.Drawing.Size(345, 557);
+            this.Root.Size = new System.Drawing.Size(345, 390);
             this.Root.TextVisible = false;
             // 
             // layoutControlItem8
@@ -372,32 +369,25 @@
             this.layoutControlItem1.Location = new System.Drawing.Point(172, 308);
             this.layoutControlItem1.Name = "layoutControlItem1";
             this.layoutControlItem1.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
-            this.layoutControlItem1.Size = new System.Drawing.Size(173, 36);
+            this.layoutControlItem1.Size = new System.Drawing.Size(173, 33);
             this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
             this.layoutControlItem1.TextVisible = false;
             // 
             // emptySpaceItem1
             // 
             this.emptySpaceItem1.AllowHotTrack = false;
-            this.emptySpaceItem1.Location = new System.Drawing.Point(0, 344);
+            this.emptySpaceItem1.Location = new System.Drawing.Point(0, 341);
             this.emptySpaceItem1.Name = "emptySpaceItem1";
-            this.emptySpaceItem1.Size = new System.Drawing.Size(345, 213);
+            this.emptySpaceItem1.Size = new System.Drawing.Size(345, 49);
             this.emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0);
             // 
-            // emptySpaceItem2
-            // 
-            this.emptySpaceItem2.AllowHotTrack = false;
-            this.emptySpaceItem2.Location = new System.Drawing.Point(0, 308);
-            this.emptySpaceItem2.Name = "emptySpaceItem2";
-            this.emptySpaceItem2.Size = new System.Drawing.Size(172, 10);
-            this.emptySpaceItem2.TextSize = new System.Drawing.Size(0, 0);
-            // 
             // layoutControlItem2
             // 
             this.layoutControlItem2.Control = this.btnClose;
-            this.layoutControlItem2.Location = new System.Drawing.Point(0, 318);
+            this.layoutControlItem2.Location = new System.Drawing.Point(0, 308);
             this.layoutControlItem2.Name = "layoutControlItem2";
-            this.layoutControlItem2.Size = new System.Drawing.Size(172, 26);
+            this.layoutControlItem2.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 9, 2);
+            this.layoutControlItem2.Size = new System.Drawing.Size(172, 33);
             this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
             this.layoutControlItem2.TextVisible = false;
             // 
@@ -408,7 +398,7 @@
             this.Controls.Add(this.layoutControl1);
             this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
             this.Name = "X2D1GDOPParam";
-            this.Size = new System.Drawing.Size(345, 557);
+            this.Size = new System.Drawing.Size(345, 390);
             ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
             this.layoutControl1.ResumeLayout(false);
             ((System.ComponentModel.ISupportInitialize)(this.txtCapTime.Properties.CalendarTimeProperties)).EndInit();
@@ -431,7 +421,6 @@
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
             this.ResumeLayout(false);
 
@@ -459,7 +448,6 @@
         private DevExpress.XtraEditors.SimpleButton btnOK;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
         private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
-        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem2;
         private DevExpress.XtraEditors.SimpleButton btnClose;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
     }

+ 39 - 0
XdCxRhDW.App/XdCxRhDW.App.csproj

@@ -204,6 +204,8 @@
     <Compile Include="Api\时差线\DrawDtoLineHelper.cs" />
     <Compile Include="Api\时差线\DtoLineModel.cs" />
     <Compile Include="Api\时差线\OutputHelper.cs" />
+    <Compile Include="Api\频差线\DrawDfoLineHelper.cs" />
+    <Compile Include="Api\频差线\DfoLineModel.cs" />
     <Compile Include="Basic\BaseVm.cs" />
     <Compile Include="Basic\BindingData.cs" />
     <Compile Include="Basic\ColorHelper.cs" />
@@ -238,6 +240,7 @@
     <Compile Include="CpuCgTools\FormCpuCg.Designer.cs">
       <DependentUpon>FormCpuCg.cs</DependentUpon>
     </Compile>
+    <Compile Include="DxHelper\EnumExtension.cs" />
     <Compile Include="DxHelper\MsgBoxHelper.cs" />
     <Compile Include="DxHelper\PopupHelper.cs" />
     <Compile Include="DxHelper\SvgHelper.cs" />
@@ -361,6 +364,18 @@
     <Compile Include="UserControl\CtrlXl.Designer.cs">
       <DependentUpon>CtrlXl.cs</DependentUpon>
     </Compile>
+    <Compile Include="UserControl\X1D1GDOPParam.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UserControl\X1D1GDOPParam.Designer.cs">
+      <DependentUpon>X1D1GDOPParam.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UserControl\GDOPParam.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UserControl\GDOPParam.Designer.cs">
+      <DependentUpon>GDOPParam.cs</DependentUpon>
+    </Compile>
     <Compile Include="UserControl\X2D1GDOPParam.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -482,6 +497,12 @@
     <None Include="星历推算\Tle2XYZ.exe">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <EmbeddedResource Include="UserControl\X1D1GDOPParam.resx">
+      <DependentUpon>X1D1GDOPParam.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UserControl\GDOPParam.resx">
+      <DependentUpon>GDOPParam.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="UserControl\X2D1GDOPParam.resx">
       <DependentUpon>X2D1GDOPParam.cs</DependentUpon>
     </EmbeddedResource>
@@ -519,6 +540,24 @@
     <Content Include="Api\时差线\XingDiSCX.exe">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="Api\频差线\locow.exe">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Api\频差线\msvcp100.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Api\频差线\msvcr100.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Api\频差线\Positioning.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Api\频差线\Positioning_calc.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Api\频差线\Positioning_dtf.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="Image\DfoLine.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>