소스 검색

修改天线信息从参估信息中获取

wyq 1 년 전
부모
커밋
f30b1fa99b

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

@@ -14,12 +14,12 @@ namespace XdCxRhDW.App.Api
         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)
+        public static IEnumerable<(double lon, double lat)> DfoLineTwoStart(DfoLineTwoStartOption opt)
         {
             List<DfoLinePoint> list = new List<DfoLinePoint>();
 
@@ -34,7 +34,7 @@ namespace XdCxRhDW.App.Api
             List<string> arguments = new List<string>();
             arguments.Add("dfoline");
             arguments.Add($"{opt.TargetDfo}");
-            arguments.Add($"{opt.Freq*1e6}");
+            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");

+ 4 - 8
XdCxRhDW.App/EditForms/TaskEditor.Designer.cs

@@ -74,24 +74,20 @@
             // 
             // txtTaskName
             // 
-            this.txtTaskName.Location = new System.Drawing.Point(22, 39);
+            this.txtTaskName.Location = new System.Drawing.Point(22, 40);
             this.txtTaskName.Name = "txtTaskName";
             this.txtTaskName.Properties.AutoHeight = false;
-            this.txtTaskName.Size = new System.Drawing.Size(393, 25);
+            this.txtTaskName.Size = new System.Drawing.Size(393, 24);
             this.txtTaskName.StyleController = this.layoutControl1;
             this.txtTaskName.TabIndex = 4;
             // 
             // txtPosType
             // 
             this.txtPosType.EditValue = 0;
-            this.txtPosType.Location = new System.Drawing.Point(22, 93);
+            this.txtPosType.Location = new System.Drawing.Point(22, 94);
             this.txtPosType.Name = "txtPosType";
             this.txtPosType.Properties.Columns = 1;
-            this.txtPosType.Properties.Items.AddRange(new DevExpress.XtraEditors.Controls.RadioGroupItem[] {
-            new DevExpress.XtraEditors.Controls.RadioGroupItem(0, "一星一地测向定位"),
-            new DevExpress.XtraEditors.Controls.RadioGroupItem(1, "两星一地定位"),
-            new DevExpress.XtraEditors.Controls.RadioGroupItem(2, "融合定位")});
-            this.txtPosType.Size = new System.Drawing.Size(393, 171);
+            this.txtPosType.Size = new System.Drawing.Size(393, 170);
             this.txtPosType.StyleController = this.layoutControl1;
             this.txtPosType.TabIndex = 5;
             // 

+ 12 - 0
XdCxRhDW.App/EditForms/TaskEditor.cs

@@ -1,11 +1,15 @@
 using DevExpress.Utils.About;
 using DevExpress.XtraEditors;
+using DevExpress.XtraEditors.Controls;
+using DxHelper;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
 using System.Data;
 using System.Drawing;
 using System.Linq;
+using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
@@ -22,6 +26,14 @@ namespace XdCxRhDW.App.EditForms
             this.Text = "添加任务";
             info = new TaskInfo();
             this.StartPosition = FormStartPosition.CenterParent;
+            //加载DW类型
+            List<RadioGroupItem> radioGroups = new List<RadioGroupItem>();
+            var values = Enum.GetValues(typeof(EnumPosType));
+            foreach (var item in values)
+            {
+                radioGroups.Add(new RadioGroupItem(Convert.ToInt32(item), ((EnumPosType)item).GetEnumDisplayName()));
+            }
+            this.txtPosType.Properties.Items.AddRange(radioGroups.ToArray());
         }
         public TaskEditor(TaskInfo info)
            : this()

+ 156 - 76
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -302,19 +302,34 @@ namespace XdCxRhDW.App.UserControl
             {
                 case EnumPosType.X1D1CX:
                     //一星一地 测向线
-                    btnDrawDfo.Visibility = btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
+                    btnDrawDto.Visibility = btnDrawDfo.Visibility = btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
                     btnDrawCX.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
                     break;
                 case EnumPosType.X2D1:
                     //两星一地 GDOP 时差线
-                    btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
+                    btnDrawDto.Visibility = btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
                     btnDrawCX.Visibility = btnDrawDfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
                     break;
                 case EnumPosType.RH:
                     //融合DW GDOP 时差线 测向线
-                    btnDrawCX.Visibility = btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
+                    btnDrawDto.Visibility = btnDrawCX.Visibility = btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
                     btnDrawDfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
                     break;
+                case EnumPosType.X3TwoDto:
+                    //三星双时差DW GDOP 时差线 
+                    btnDrawDto.Visibility = btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
+                    btnDrawCX.Visibility = btnDrawDfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
+                    break;
+                case EnumPosType.X3TwoDfo:
+                    //三星双频差DW GDOP 频差线 
+                    btnDrawDfo.Visibility = btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
+                    btnDrawDto.Visibility = btnDrawCX.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
+                    break;
+                case EnumPosType.X2Dfo:
+                    //双星时频差DW GDOP 时频差线 
+                    btnDrawDto.Visibility = btnDrawDfo.Visibility = btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
+                    btnDrawCX.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
+                    break;
                 default:
                     break;
             }
@@ -632,10 +647,10 @@ namespace XdCxRhDW.App.UserControl
             var posRes = info.Item1;
             if (posRes == null) return;
             var posType = info.Item2;
-            DrawGDOP(posRes.SigTime, posType);
+            DrawGDOP(posRes, posType);
         }
 
-        private void DrawGDOP(DateTime sigTime, EnumPosType posType)
+        private void DrawGDOP(PosRes item, EnumPosType posType)
         {
             try
             {
@@ -648,7 +663,7 @@ namespace XdCxRhDW.App.UserControl
                         break;
                     case EnumPosType.X2D1:
                     case EnumPosType.RH:
-                        X2D1GDOPParam x2D1GdopParam = new X2D1GDOPParam(sigTime);
+                        X2D1GDOPParam x2D1GdopParam = new X2D1GDOPParam(item);
                         x2D1GdopParam.mapControl1 = mapControl1;
                         DxHelper.PopupHelper.ShowPopup(x2D1GdopParam, mapControl1, mapControl1.Width / 4);
                         break;
@@ -681,6 +696,11 @@ namespace XdCxRhDW.App.UserControl
                     DrawXDtoLine(item, EnumPosType.X1D1CX);
                     DrawXDtoLine(item, EnumPosType.X2D1);
                     break;
+                case EnumPosType.X3TwoDto:
+                case EnumPosType.X2Dfo:
+                    DrawX3toLine(item, posType);
+                    break;
+
                 default:
                     break;
             }
@@ -691,72 +711,133 @@ namespace XdCxRhDW.App.UserControl
         {
             try
             {
-                List<TxInfo> listTx = new List<TxInfo>();
+                StationRes station;
                 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();
-
+                    station = await db.StationRes.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)
+                if (station == null)
                 {
-                    DxHelper.MsgBoxHelper.ShowWarning($"主星天线信息为空!");
+                    DxHelper.MsgBoxHelper.ShowWarning($"站点信息为空!");
                     return;
                 }
-                var satNTx = listTx.Find(p => p.TxType == EnumTxType.AdjaSat);
-                if (posType == EnumPosType.X2D1 && satNTx == null)
+                if (station.SatTxLon == 0 || station.SatTxLat == 0)
                 {
-                    DxHelper.MsgBoxHelper.ShowWarning($"邻星天线信息为空!");
+                    DxHelper.MsgBoxHelper.ShowWarning($"天线信息为空!");
                     return;
                 }
-                var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
-                if (cdbTx == null)
+               
+                if (station.CdbTxLon == 0 || station.CdbTxLat == 0)
                 {
                     DxHelper.MsgBoxHelper.ShowWarning($"超短波信息为空!");
                     return;
                 }
-                var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
-                if (refTx == null)
+                if (station.RefLon == 0 || station.RefLat == 0)
                 {
                     DxHelper.MsgBoxHelper.ShowWarning($"参考站信息为空!");
                     return;
                 }
                 DtoLineXdOption dtoLineXd = new DtoLineXdOption();
                 dtoLineXd.MsEph = new double[] { cg.MainX.Value, cg.MainY.Value, cg.MainZ.Value, 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.MsAnt = new double[] { station.SatTxLon, station.SatTxLat, 0 };
+                dtoLineXd.CDBAnt = new double[] { station.CdbTxLon, station.CdbTxLat, 0 };
+                dtoLineXd.RefGeod = new double[] { station.RefLon, station.RefLat, 0 };
                 dtoLineXd.xdDto = cg.DtoCdb.Value;
                 dtoLineXd.RefDto = cg.YbMainDto.Value;
                 dtoLineXd.PosLon = item.PosLon;
                 dtoLineXd.PosLat = item.PosLat;
+
+                var msat = listSat.FirstOrDefault(m => m.SatCode == cg.MainCode.Value)?.Sat;
                 var xdDtoLine = DrawDtoLineHelper.DtoLineXd(dtoLineXd);
-                mapControl1.DrawDtoPonit($"星地[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == cdbTx.ID)?.Sat}]时差线", xdDtoLine);
+                mapControl1.DrawDtoPonit($"星地[{msat},[{station.CdbTxLon}°]]时差线", xdDtoLine);
 
                 if (posType == EnumPosType.X2D1)
                 {
                     DtoLineTwoStartOption twoStartOption = new DtoLineTwoStartOption();
                     twoStartOption.MsEph = new double[] { cg.MainX.Value, cg.MainY.Value, cg.MainZ.Value, 0, 0, 0 };
                     twoStartOption.NsEph = new double[] { cg.Adja1X.Value, cg.Adja1Y.Value, cg.Adja1Z.Value, 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.MsAnt = new double[] { station.SatTxLon, station.SatTxLat, 0 };
+                    twoStartOption.NsAnt = new double[] { station.SatTxLon, station.SatTxLat, 0 };
+                    twoStartOption.RefGeod = new double[] { station.RefLon, station.RefLat, 0 };
                     twoStartOption.TargetDto = cg.Dto1.Value;
                     twoStartOption.RefDto = cg.YbMainDto.Value - cg.YbAdja1Dto.Value;
                     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);
+                    mapControl1.DrawDtoPonit($"双星[{msat},{listSat.FirstOrDefault(m => m.SatCode == cg.Adja1Code.Value)?.Sat}]时差线", tsDtoLine);
+                }
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error($"绘制{posType.GetEnumDisplayName()}时差线失败", ex);
+                DxHelper.MsgBoxHelper.ShowWarning($"绘制{posType.GetEnumDisplayName()}时差线失败,失败信息:{ex.Message}");
+            }
+        }
+
+        private async void DrawX3toLine(PosRes item, EnumPosType posType)
+        {
+            try
+            {
+                StationRes station;
+                List<SatInfo> listSat = new List<SatInfo>();
+                CgRes cg;
+                using (RHDWContext db = new RHDWContext())
+                {
+
+                    listSat = db.SatInfos.ToList();
+                    cg = await db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefaultAsync();
+                    station = await db.StationRes.Where(m => m.ID == item.CgResID).FirstOrDefaultAsync();
+                }
+                if (cg == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"未找到定位相关的计算[{item.CgResID}]信息");
+                    return;
+                }
+                if (station == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"站点信息为空!");
+                    return;
+                }
+
+                if (station.RefLon == 0 || station.RefLat == 0)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"参考站信息为空!");
+                    return;
+                }
+
+                DtoLineTwoStartOption twoStartOption = new DtoLineTwoStartOption();
+                twoStartOption.MsEph = new double[] { cg.MainX.Value, cg.MainY.Value, cg.MainZ.Value, 0, 0, 0 };
+                twoStartOption.NsEph = new double[] { cg.Adja1X.Value, cg.Adja1Y.Value, cg.Adja1Z.Value, 0, 0, 0 };
+                twoStartOption.MsAnt = new double[] { station.SatTxLon, station.SatTxLat, 0 };
+                twoStartOption.NsAnt = new double[] { station.SatTxLon, station.SatTxLat, 0 };
+                twoStartOption.RefGeod = new double[] { station.RefLon, station.RefLat, 0 };
+                twoStartOption.TargetDto = cg.Dto1.Value;
+                twoStartOption.RefDto = cg.YbMainDto.Value - cg.YbAdja1Dto.Value;
+                twoStartOption.PosLon = item.PosLon;
+                twoStartOption.PosLat = item.PosLat;
+
+                var msat = listSat.FirstOrDefault(m => m.SatCode == cg.MainCode.Value)?.Sat;
+                var tsDtoLine = DrawDtoLineHelper.DtoLineXDTwoStart(twoStartOption);
+                mapControl1.DrawDtoPonit($"{posType.GetEnumDisplayName()}[{msat},{listSat.FirstOrDefault(m => m.SatCode == cg.Adja1Code.Value)?.Sat}]时差线", tsDtoLine);
+                if (posType == EnumPosType.X3TwoDto)
+                {
+                    twoStartOption.NsEph = new double[] { cg.Adja2X.Value, cg.Adja2Y.Value, cg.Adja2Z.Value, 0, 0, 0 };
+                    twoStartOption.TargetDto = cg.Dto2.Value;
+                    twoStartOption.RefDto = cg.YbMainDto.Value - cg.YbAdja2Dto.Value;
+                    twoStartOption.PosLon = item.PosLon;
+                    twoStartOption.PosLat = item.PosLat;
+                    var tsDtoLine1 = DrawDtoLineHelper.DtoLineXDTwoStart(twoStartOption);
+                    mapControl1.DrawDtoPonit($"{posType.GetEnumDisplayName()}[{msat},{listSat.FirstOrDefault(m => m.SatCode == cg.Adja2Code.Value)?.Sat}]时差线", tsDtoLine1);
                 }
             }
             catch (Exception ex)
@@ -769,78 +850,73 @@ namespace XdCxRhDW.App.UserControl
         {
             switch (posType)
             {
-                case EnumPosType.X1D1CX:
-                case EnumPosType.X2D1:
-                    DrawXDfoLine(item, posType);
-                    break;
-                case EnumPosType.RH:
-                    DrawXDfoLine(item, EnumPosType.X1D1CX);
-                    DrawXDfoLine(item, EnumPosType.X2D1);
+                case EnumPosType.X3TwoDfo:
+                case EnumPosType.X2Dfo:
+                    DrawX3DfoLine(item, posType);
                     break;
                 default:
                     break;
             }
 
         }
-        private async void DrawXDfoLine(PosRes item, EnumPosType posType)
+        private async void DrawX3DfoLine(PosRes item, EnumPosType posType)
         {
             try
             {
-                List<TxInfo> listTx = new List<TxInfo>();
+                StationRes station;
                 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();
 
+                    station = await db.StationRes.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)
+                if (station == null)
                 {
-                    DxHelper.MsgBoxHelper.ShowWarning($"主星天线信息为空!");
+                    DxHelper.MsgBoxHelper.ShowWarning($"站点信息为空!");
                     return;
                 }
-                var satNTx = listTx.Find(p => p.TxType == EnumTxType.AdjaSat);
-                if (posType == EnumPosType.X2D1 && satNTx == null)
+                if (station.SatTxLon == 0 || station.SatTxLat == 0)
                 {
-                    DxHelper.MsgBoxHelper.ShowWarning($"邻星天线信息为空!");
+                    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)
+                if (station.RefLon == 0 || station.RefLat == 0)
                 {
                     DxHelper.MsgBoxHelper.ShowWarning($"参考站信息为空!");
                     return;
                 }
-                if (posType == EnumPosType.X2D1)
-                {
-                    DfoLineTwoStartOption twoStartOption = new DfoLineTwoStartOption();
-                    twoStartOption.Freq = cg.TarFreqUp.HasValue ? cg.TarFreqUp.Value : 0;
-                    twoStartOption.RefFreq = cg.RefFreqUp.HasValue ? cg.RefFreqUp.Value : 0;
-                    twoStartOption.MsEph = new double[] { cg.MainX.Value, cg.MainY.Value, cg.MainZ.Value, cg.MainVx.Value, cg.MainVy.Value, cg.MainVz.Value };
-                    twoStartOption.NsEph = new double[] { cg.Adja1X.Value, cg.Adja1Y.Value, cg.Adja1Z.Value, cg.Adja1Vx.Value, cg.Adja1Vy.Value, cg.Adja1Vz.Value };
-                    twoStartOption.MsAnt = new double[] { satTx.Lon, satTx.Lat };
-                    twoStartOption.NsAnt = new double[] { satNTx.Lon, satNTx.Lat };
-                    twoStartOption.RefGeod = new double[] { refTx.Lon, refTx.Lat };
-                    twoStartOption.TargetDfo = cg.Dfo1.Value;
-                    twoStartOption.Turn1 = Math.Abs(twoStartOption.Freq - (cg.TarFreqDown.HasValue ? cg.TarFreqDown.Value : 0));
-                    twoStartOption.Turn2 = Math.Abs(twoStartOption.RefFreq - (cg.RefFreqDown.HasValue ? cg.RefFreqDown.Value : 0));
-                    twoStartOption.RefDfo = cg.YbMainDfo.Value - cg.YbAdja1Dfo.Value;
-                    var tsDtoLine = DrawDfoLineHelper.DtfoLineTwoStart(twoStartOption);
-                    mapControl1.DrawDtoPonit($"双星[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == satNTx.ID)?.Sat}]频差线", tsDtoLine);
+                DfoLineTwoStartOption twoStartOption = new DfoLineTwoStartOption();
+                twoStartOption.Freq = cg.TarFreqUp.HasValue ? cg.TarFreqUp.Value : 0;
+                twoStartOption.RefFreq = cg.RefFreqUp.HasValue ? cg.RefFreqUp.Value : 0;
+                twoStartOption.MsEph = new double[] { cg.MainX.Value, cg.MainY.Value, cg.MainZ.Value, cg.MainVx.Value, cg.MainVy.Value, cg.MainVz.Value };
+                twoStartOption.NsEph = new double[] { cg.Adja1X.Value, cg.Adja1Y.Value, cg.Adja1Z.Value, cg.Adja1Vx.Value, cg.Adja1Vy.Value, cg.Adja1Vz.Value };
+                twoStartOption.MsAnt = new double[] { station.SatTxLon, station.SatTxLat, 0 };
+                twoStartOption.NsAnt = new double[] { station.SatTxLon, station.SatTxLat, 0 };
+                twoStartOption.RefGeod = new double[] { station.RefLon, station.RefLat, 0 };
+                twoStartOption.TargetDfo = cg.Dfo1.Value;
+                twoStartOption.Turn1 = Math.Abs(twoStartOption.Freq - (cg.TarFreqDown.HasValue ? cg.TarFreqDown.Value : 0));
+                twoStartOption.Turn2 = Math.Abs(twoStartOption.RefFreq - (cg.RefFreqDown.HasValue ? cg.RefFreqDown.Value : 0));
+                twoStartOption.RefDfo = cg.YbMainDfo.Value - cg.YbAdja1Dfo.Value;
+                var msat = listSat.FirstOrDefault(m => m.SatCode == cg.MainCode.Value)?.Sat;
+                var tsDtoLine = DrawDfoLineHelper.DfoLineTwoStart(twoStartOption);
+                mapControl1.DrawDtoPonit($"{posType.GetEnumDisplayName()}[{msat},{listSat.FirstOrDefault(m => m.SatCode == cg.Adja1X.Value)?.Sat}]频差线", tsDtoLine);
+
+                if (posType == EnumPosType.X3TwoDfo)
+                {
+                    twoStartOption.NsEph = new double[] { cg.Adja2X.Value, cg.Adja2Y.Value, cg.Adja2Z.Value, cg.Adja2Vx.Value, cg.Adja2Vy.Value, cg.Adja2Vz.Value };
+                    twoStartOption.TargetDfo = cg.Dfo2.Value;
+                    twoStartOption.RefDfo = cg.YbMainDfo.Value - cg.YbAdja2Dfo.Value;
+                    var tsDtoLine1 = DrawDfoLineHelper.DfoLineTwoStart(twoStartOption);
+                    mapControl1.DrawDtoPonit($"{posType.GetEnumDisplayName()}[{msat},{listSat.FirstOrDefault(m => m.SatCode == cg.Adja2Code.Value)?.Sat}]频差线", tsDtoLine1);
                 }
             }
             catch (Exception ex)
@@ -858,21 +934,25 @@ namespace XdCxRhDW.App.UserControl
             }
             try
             {
-                List<TxInfo> listTx = new List<TxInfo>();
                 CxRes cx;
+                StationRes station;
                 using (RHDWContext db = new RHDWContext())
                 {
-                    listTx = db.TxInfos.ToList();
                     cx = await db.CxRes.Where(m => m.ID == item.CxResID.Value).FirstOrDefaultAsync();
-
+                    station = await db.StationRes.Where(m => m.ID == item.CgResID).FirstOrDefaultAsync();
                 }
                 if (cx == null)
                 {
                     DxHelper.MsgBoxHelper.ShowWarning($"未找到定位相关的测向[{item.CxResID.Value}]信息");
                     return;
                 }
-                var satTx = listTx.Find(p => p.TxType == EnumTxType.Cx);
-                if (satTx == null)
+                if (station == null)
+                {
+                    DxHelper.MsgBoxHelper.ShowWarning($"站点信息为空!");
+                    return;
+                }
+               
+                if (station.CxLon== 0 || station.CxLat == 0)
                 {
                     DxHelper.MsgBoxHelper.ShowWarning($"测向站信息为空!");
                     return;
@@ -880,10 +960,10 @@ namespace XdCxRhDW.App.UserControl
                 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);
+                var km = MapControlEx.CalcLineKm(station.CxLon, station.CxLat, item.PosLon, item.PosLat);
+                var endpoint = MapControlEx.CalcSituation(station.CxLon, station.CxLat, deg, (km + 100) * 1000);
                 List<(double, double)> points = new List<(double, double)>();
-                points.Add((satTx.Lon, satTx.Lat));
+                points.Add((station.CxLon, station.CxLat));
                 points.Add((endpoint.Item1, endpoint.Item2));
                 mapControl1.DrawCXLine($"测向线角度:{cx.Fx}°\t\n", points);
             }

+ 11 - 21
XdCxRhDW.App/UserControl/GDOPParam.cs

@@ -24,7 +24,7 @@ namespace XdCxRhDW.App.UserControl
             DtousErr = Convert.ToDouble(txtDtousErr1.Text),
             SatLocErr = Convert.ToDouble(txtSatLocErr1.Text),
         };
-        public GDOPParam(DateTime sigTime)
+        public GDOPParam(PosRes item)
         {
             InitializeComponent();
             txtCapTime.UseDefault();
@@ -32,7 +32,7 @@ namespace XdCxRhDW.App.UserControl
             txtTleAdja.UseDoubleClickToSelectAll();
             txtStationLocation1.UseDoubleClickToSelectAll();
             txtRefLocation1.UseDoubleClickToSelectAll();
-            this.txtCapTime.DateTime = sigTime;
+            this.txtCapTime.DateTime = item.SigTime;
             this.txtDtousErr1.EditValue = 1;
             this.txtSatLocErr1.EditValue = 1000;
             List<string> xlall = new List<string>();
@@ -41,44 +41,34 @@ namespace XdCxRhDW.App.UserControl
             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)
+                var cg = db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefault();
+                var station = db.StationRes.Where(m => m.ID == item.StationResID).FirstOrDefault();
+                if (station != null)
                 {
-                    this.txtRefLocation1.Text = $"{refLoc.Lon},{refLoc.Lat}";
+                    this.txtStationLocation1.Text = $"{station.CdbTxLon},{station.CdbTxLat}";
+                    this.txtRefLocation1.Text = $"{station.RefLon},{station.RefLat}";
                 }
                 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))
+                if (xlList.Any(m => m.SatCode == cg.MainCode.Value))
                 {
-                    mainTle = xlList.First(m => m.SatCode == mainTx.SatInfo.SatCode).TwoLine;
+                    mainTle = xlList.First(m => m.SatCode == cg.MainCode.Value).TwoLine;
                 }
                 else
                 {
                     mainTle = xlList.First().TwoLine;
                 }
 
-                if (adjaTx != null && xlList.Any(m => m.SatCode == adjaTx.SatInfo.SatCode))
+                if (xlList.Any(m => m.SatCode == cg.Adja1Code.Value))
                 {
-                    adjaTle = xlList.First(m => m.SatCode == adjaTx.SatInfo.SatCode).TwoLine;
+                    adjaTle = xlList.First(m => m.SatCode == cg.Adja1Code.Value).TwoLine;
                 }
                 else
                 {
                     adjaTle = xlList.First().TwoLine;
                 }
             }
-
-
             txtTleMain.UseDefault().SetStringData(xlall).Text = mainTle;
             txtTleAdja.UseDefault().SetStringData(xlall).Text = adjaTle;
         }

+ 10 - 24
XdCxRhDW.App/UserControl/X1D1GDOPParam.cs

@@ -23,14 +23,14 @@ namespace XdCxRhDW.App.UserControl
             DtousErr = Convert.ToDouble(txtDtousErr1.Text),
             SatLocErr = Convert.ToDouble(txtSatLocErr1.Text),
         };
-        public X1D1GDOPParam(DateTime sigTime)
+        public X1D1GDOPParam(PosRes item)
         {
             InitializeComponent();
             txtCapTime.UseDefault();
             txtTleMain.UseDoubleClickToSelectAll();
             txtStationLocation1.UseDoubleClickToSelectAll();
             txtRefLocation1.UseDoubleClickToSelectAll();
-            this.txtCapTime.DateTime = sigTime;
+            this.txtCapTime.DateTime = item.SigTime;
             this.txtDtousErr1.EditValue = 1;
             this.txtSatLocErr1.EditValue = 1000;
             List<string> xlall = new List<string>();
@@ -40,44 +40,30 @@ namespace XdCxRhDW.App.UserControl
             {
                 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)
+                var cg = db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefault();
+                var station = db.StationRes.Where(m => m.ID == item.StationResID).FirstOrDefault();
+                if (station != null)
                 {
-                    this.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}";
+                    this.txtStationLocation1.Text = $"{station.CdbTxLon},{station.CdbTxLat}";
+                    this.txtRefLocation1.Text = $"{station.RefLon},{station.RefLat}";
                 }
                 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))
+                if (xlList.Any(m => m.SatCode == cg.MainCode.Value))
                 {
-                    mainTle = xlList.First(m => m.SatCode == mainTx.SatInfo.SatCode).TwoLine;
+                    mainTle = xlList.First(m => m.SatCode == cg.MainCode.Value).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;
+
         }
 
 

+ 13 - 18
XdCxRhDW.App/UserControl/X2D1GDOPParam.cs

@@ -7,6 +7,7 @@ using XdCxRhDW.App.Model;
 using XdCxRhDW.App.EFContext;
 using XdCxRhDW.App.Api.GDOP误差椭圆;
 using System.Collections.Generic;
+using System.Data.Entity;
 namespace XdCxRhDW.App.UserControl
 {
     public partial class X2D1GDOPParam : DevExpress.XtraEditors.XtraUserControl
@@ -24,7 +25,7 @@ namespace XdCxRhDW.App.UserControl
             DtousErr = Convert.ToDouble(txtDtousErr1.Text),
             SatLocErr = Convert.ToDouble(txtSatLocErr1.Text),
         };
-        public X2D1GDOPParam(DateTime sigTime)
+        public X2D1GDOPParam(PosRes item)
         {
             InitializeComponent();
             txtCapTime.UseDefault();
@@ -32,7 +33,7 @@ namespace XdCxRhDW.App.UserControl
             txtTleAdja.UseDoubleClickToSelectAll();
             txtStationLocation1.UseDoubleClickToSelectAll();
             txtRefLocation1.UseDoubleClickToSelectAll();
-            this.txtCapTime.DateTime = sigTime;
+            this.txtCapTime.DateTime = item.SigTime;
             this.txtDtousErr1.EditValue = 1;
             this.txtSatLocErr1.EditValue = 1000;
             List<string> xlall = new List<string>();
@@ -42,35 +43,29 @@ namespace XdCxRhDW.App.UserControl
             {
                 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)
+                var cg = db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefault();
+                var station = db.StationRes.Where(m => m.ID == item.StationResID).FirstOrDefault();
+                if (station != null)
                 {
-                    this.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}";
+                    this.txtStationLocation1.Text = $"{station.CdbTxLon},{station.CdbTxLat}";
+                    this.txtRefLocation1.Text = $"{station.RefLon},{station.RefLat}";
                 }
+
                 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))
+                if ( xlList.Any(m => m.SatCode == cg.MainCode.Value))
                 {
-                    mainTle = xlList.First(m => m.SatCode == mainTx.SatInfo.SatCode).TwoLine;
+                    mainTle = xlList.First(m => m.SatCode == cg.MainCode.Value).TwoLine;
                 }
                 else
                 {
                     mainTle = xlList.First().TwoLine;
                 }
 
-                if (adjaTx != null && xlList.Any(m => m.SatCode == adjaTx.SatInfo.SatCode))
+                if ( xlList.Any(m => m.SatCode == cg.Adja1Code.Value))
                 {
-                    adjaTle = xlList.First(m => m.SatCode == adjaTx.SatInfo.SatCode).TwoLine;
+                    adjaTle = xlList.First(m => m.SatCode == cg.Adja1Code.Value).TwoLine;
                 }
                 else
                 {