|
@@ -84,7 +84,9 @@ namespace XzXdDw.App.UserControl
|
|
|
}
|
|
|
})
|
|
|
.AddMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), LoadTestData)
|
|
|
+ .AddMenu("绘制频差线", SvgHelper.LoadFromFile("Image\\DfoLine.svg"), DrawDfoLine)
|
|
|
.AddMenu("绘制误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), DrawErrorEllipse1X)
|
|
|
+
|
|
|
.AddMenu("停止加载", SvgHelper.LoadFromFile("Image\\Stop.svg"), () => stoped = true);
|
|
|
|
|
|
|
|
@@ -228,14 +230,19 @@ namespace XzXdDw.App.UserControl
|
|
|
var satNTx = listTx.Find(p => p.TxType == EnumTxType.AdjaSat);
|
|
|
var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
|
|
|
var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
|
|
|
+#warning 但凡是和频差相关的 星历必须给速度
|
|
|
+ double[] main_eph = new double[6] { -1608409.905, 5994264.071, 3139843.443, -6633.016931, -374.023436, -2678.1580461 };
|
|
|
+
|
|
|
+ double[] main_eph1 = new double[6] { -3479298.029, 5612482.078, 2187911.486, -5784.105325, -2163.505176, -3632.855383 };
|
|
|
+ double[] main_eph2 = new double[6] { -5018677.726, 4714449.429, 1001437.615, -4399.327638, -3780.398104, -4206.338078 };
|
|
|
XzXdDw.App.Api.低轨GDOP误差椭圆.ErrorEllipseDTO1XOption Option = new XzXdDw.App.Api.低轨GDOP误差椭圆.ErrorEllipseDTO1XOption();
|
|
|
- Option.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
|
|
|
- Option.NsEph1 = new double[] { cg.AdjaX, cg.AdjaY, cg.AdjaZ, 0, 0, 0 };
|
|
|
- Option.NsEph2 = new double[] { cdbTx.Lon, cdbTx.Lat, 0 };
|
|
|
- Option.SelectPoint = new double[3] { item.PosLon, item.PosLat, 0 };
|
|
|
- Option.DfoErr = 1;
|
|
|
- Option.EphPosErr = 1;
|
|
|
- Option.EphVelErr = 1;
|
|
|
+ Option.MsEph = main_eph;
|
|
|
+ Option.NsEph1 = main_eph1;
|
|
|
+ Option.NsEph2 = main_eph2;
|
|
|
+ Option.SelectPoint =new double[2] { -180, -85}; ;//new double[3] { item.PosLon, item.PosLat, 0 };
|
|
|
+ Option.DfoErr = 0.01; ;
|
|
|
+ Option.EphPosErr = 1.0e3;
|
|
|
+ Option.EphVelErr = 0.1;
|
|
|
Option.fu = 3.1085e8;
|
|
|
var points = XzXdDw.App.Api.低轨GDOP误差椭圆.ErrEllipseHelper.ErrorEllipseSingleX(Option);
|
|
|
mapControl1.DrawDtoPonit($"单星[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat}]误差椭圆线", points);
|
|
@@ -247,6 +254,66 @@ namespace XzXdDw.App.UserControl
|
|
|
XtraMessageBox.Show($"绘制误差椭圆线失败,失败信息:{ex.Message}");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private async void DrawDfoLine()
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+
|
|
|
+ var ids = gridView1.GetSelectedRows();
|
|
|
+ if (ids.Length <= 0)
|
|
|
+ {
|
|
|
+ XtraMessageBox.Show("请选择需要绘制频差线的定位数据信息!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var item = gridView1.GetRow(ids[0]) as PosRes;
|
|
|
+ List<TxInfo> listTx = new List<TxInfo>();
|
|
|
+ List<Model.SatInfo> listSat = new List<Model.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)
|
|
|
+ {
|
|
|
+ XtraMessageBox.Show($"未找到定位相关的计算[{item.CgResID}]信息");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
|
|
|
+ double[] main_eph = new double[6] { -1608409.905, 5994264.071, 3139843.443, -6633.016931, -374.023436, -2678.1580461 };
|
|
|
+
|
|
|
+ double[] main_eph1 = new double[6] { -3479298.029, 5612482.078, 2187911.486, -5784.105325, -2163.505176, -3632.855383 };
|
|
|
+ double[] main_eph2 = new double[6] { -5018677.726, 4714449.429, 1001437.615, -4399.327638, -3780.398104, -4206.338078 };
|
|
|
+
|
|
|
+ //double[] Ref_Station_LLH = { 112.33, 16.3, 0 };
|
|
|
+ double[] Ref_Station_LLH = { 115.5, 9.899, 64 }; //*****参考站的位置
|
|
|
+ double[] Zone = new double[4] { -85, 85, -180, 180 };
|
|
|
+
|
|
|
+ double target_dfo1 = 2.002242571242008e+02;
|
|
|
+ double target_dfo2 = 4.311089914542198e+03;
|
|
|
+
|
|
|
+ double fu1 = 3.1085e8;
|
|
|
+
|
|
|
+
|
|
|
+ double[] target_llh = new double[6];
|
|
|
+ var xdDtoLine = DrawDtoLineHelper.DfoLineSingleStart(main_eph, main_eph1, target_dfo1,fu1);
|
|
|
+ mapControl1.DrawDtoPonit($"星地[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat}时刻1频差线", xdDtoLine);
|
|
|
+
|
|
|
+ var xdDtoLine1 = DrawDtoLineHelper.DfoLineSingleStart(main_eph, main_eph2, target_dfo2, fu1);
|
|
|
+ mapControl1.DrawDtoPonit($"星地[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat}时刻2频差线", xdDtoLine1);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Serilog.Log.Error("绘制频差线失败", ex);
|
|
|
+ XtraMessageBox.Show($"绘制频差线失败,失败信息:{ex.Message}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public XdCxRhDW.App.DTO.MapLine SampleDots(XdCxRhDW.App.DTO.MapLine line)
|
|
|
{
|
|
|
var dots = line.Line;
|