|
|
@@ -4,12 +4,14 @@ using System.Data.Entity;
|
|
|
using System.Data.SqlClient;
|
|
|
using System.Data.SQLite;
|
|
|
using System.Linq;
|
|
|
+using System.Net.Http;
|
|
|
using System.Security.Cryptography.Xml;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Web.Http;
|
|
|
using System.Windows.Documents;
|
|
|
using DevExpress.Mvvm.Native;
|
|
|
+using DevExpress.XtraCharts;
|
|
|
using DevExpress.XtraPrinting;
|
|
|
using Newtonsoft.Json;
|
|
|
using PosResAnalysis;
|
|
|
@@ -17,6 +19,7 @@ using Serilog;
|
|
|
using Swashbuckle.Swagger;
|
|
|
using XdCxRhDw.Dto;
|
|
|
using XdCxRhDW.App.Api;
|
|
|
+using XdCxRhDW.App.App.Properties;
|
|
|
using XdCxRhDW.App.EFContext;
|
|
|
using XdCxRhDW.App.Model;
|
|
|
using XdCxRhDW.App.WebAPI.DTO;
|
|
|
@@ -32,13 +35,104 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
/// </summary>
|
|
|
public class PosController : BaseController
|
|
|
{
|
|
|
+ /// <summary>
|
|
|
+ /// 一星一地带参定位(无星历)
|
|
|
+ /// </summary>
|
|
|
+ /// <returns>返回定位结果ID</returns>
|
|
|
+ [HttpPost]
|
|
|
+ public async Task<AjaxResult<PosRes>> PosX1D1NoXlAsync(X1D1NoXlPosDto dto)
|
|
|
+ {
|
|
|
+ using (RHDWContext db = new RHDWContext())
|
|
|
+ {
|
|
|
+ var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X1D1CX).FirstOrDefaultAsync();
|
|
|
+ if (runTask == null)
|
|
|
+ {
|
|
|
+ Serilog.Log.Warning($"接收到一星一地定位参数,由于任务没有运行中忽略本次定位!");
|
|
|
+ return Error<PosRes>($"多模式融合定位平台没有启动一星一地定位任务");
|
|
|
+ }
|
|
|
+ var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
|
|
|
+ var parameter2 = new SQLiteParameter("@satcode", dto.MainSatID);
|
|
|
+ var xlInfo1 = await db.XlInfos.SqlQuery("select * from XlInfo where ABS(JULIANDAY(TimeBJ)-JULIANDAY(@sigTime))=(select min(ABS(JULIANDAY(TimeBJ)-JULIANDAY(@sigTime))) from XlInfo where satcode=@satcode)", parameter1, parameter2).FirstOrDefaultAsync();
|
|
|
+ if (xlInfo1 == null)
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"未找到卫星[{dto.MainSatID}]的双行根数星历");
|
|
|
+ return Error<PosRes>($"未找到卫星[{dto.MainSatID}]的双行根数星历");
|
|
|
+ }
|
|
|
+ Serilog.Log.Information($"卫星{dto.MainSatID}使用{xlInfo1.TwoLine}进行星历推算");
|
|
|
+ var settings = await db.SysSetings.FirstOrDefaultAsync();
|
|
|
+ var client = new HttpClient();
|
|
|
+ string url = string.Format("http://{0}:{1}/Api/", settings.ServerIp, settings.HttpPort);
|
|
|
+ url += string.Format("Xl/Calc?tleStr={0}&dt={1}", xlInfo1.TwoLine, dto.SigTime);
|
|
|
+ var response = await client.GetAsync(url);
|
|
|
+ if (!response.IsSuccessStatusCode) // 处理响应失败
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"[{dto.MainSatID}]星厉推算失败");
|
|
|
+ return Error<PosRes>($"[{dto.MainSatID}]星厉推算失败");
|
|
|
+ }
|
|
|
+ var content = await response.Content.ReadAsStringAsync();
|
|
|
+ var ephMain = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content).data;
|
|
|
+ //var ephMain = EphHelper.Calc(xlInfo1.TwoLine, dto.SigTime);
|
|
|
+ var listTx = new List<TxInfo>();
|
|
|
+ var cgRes = new CgRes();
|
|
|
+ var cxRes = new CxRes();
|
|
|
+ cgRes = db.CgRes.Add(new CgRes()
|
|
|
+ {
|
|
|
+ SigTime = dto.SigTime,
|
|
|
+ DtoSx = dto.SxDto * 1e6,
|
|
|
+ DfoSx = dto.SxDfo * 1e6,
|
|
|
+ SnrSx = dto.SxSnr,
|
|
|
+ DtoCdb = dto.XdDto * 1e6,
|
|
|
+ DfoCdb = dto.XdDfo * 1e6,
|
|
|
+ SnrCdb = dto.XdSnr,
|
|
|
+ YbMain = dto.MainYbDto * 1e6,
|
|
|
+ YbAdja = dto.AdjaYbDto * 1e6,
|
|
|
+ MainX = ephMain.X,
|
|
|
+ MainY = ephMain.Y,
|
|
|
+ MainZ = ephMain.Z,
|
|
|
+ });
|
|
|
+ listTx = await db.TxInfos.ToListAsync();
|
|
|
+ cxRes = db.CxRes.Add(new CxRes()
|
|
|
+ {
|
|
|
+ SigTime = dto.SigTime,
|
|
|
+ Fx = dto.CxRes,
|
|
|
+ });
|
|
|
+ double[] res = new double[6];
|
|
|
+ var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
|
|
|
+ var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
|
|
|
+ var cxTx = listTx.Find(p => p.TxType == EnumTxType.Cx);
|
|
|
+ var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
|
|
|
+ double[] mainSat = new double[3] { cgRes.MainX, cgRes.MainY, cgRes.MainZ };
|
|
|
+ double[] satStation = new double[3] { satTx.Lon, satTx.Lat, 0 };
|
|
|
+ double[] cdbStation = new double[3] { cdbTx.Lon, cdbTx.Lat, 0 };
|
|
|
+ double[] cxStation = new double[3] { cxTx.Lon, cxTx.Lat, 0 };
|
|
|
+ double[] refStation = new double[3] { refTx.Lon, refTx.Lat, 0 };
|
|
|
+ double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
|
|
|
+ double theta = cxRes.Fx;//单位°
|
|
|
+ PosApi.X1D1_POS2023_Core(mainSat, satStation, cdbStation, cxStation, refStation, zone, theta, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, res);
|
|
|
+ PosRes posRes = new PosRes()
|
|
|
+ {
|
|
|
+ SigTime = dto.SigTime,
|
|
|
+ TaskID = runTask.ID,
|
|
|
+ CgResID = cgRes.ID,
|
|
|
+ TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
|
+ TsName = dto.TsName,
|
|
|
+ PosLon = res[0],
|
|
|
+ PosLat = res[1],
|
|
|
+ MirrLon = res[3],
|
|
|
+ MirrLat = res[4],
|
|
|
+ };
|
|
|
+ db.PosRes.Add(posRes);
|
|
|
+ await db.SaveChangesAsync();
|
|
|
+ return Success(posRes);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 两星一地带参定位(无星历)
|
|
|
/// </summary>
|
|
|
/// <returns>返回定位结果ID</returns>
|
|
|
[HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosX2D1Async(X2D1NoXlPosDto dto)
|
|
|
+ public async Task<AjaxResult<PosRes>> PosX2D1NoXlAsync(X2D1NoXlPosDto dto)
|
|
|
{
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
@@ -48,7 +142,6 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
Serilog.Log.Warning($"接收到两星一地定位参数,由于任务没有运行中忽略本次定位!");
|
|
|
return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
|
|
|
}
|
|
|
- var listTx = await db.TxInfos.ToListAsync();
|
|
|
var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
|
|
|
var parameter2 = new SQLiteParameter("@satcode", dto.MainSatID);
|
|
|
var parameter3 = new SQLiteParameter("@satcode", dto.AdjaSatID);
|
|
|
@@ -67,19 +160,41 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
}
|
|
|
Serilog.Log.Information($"卫星{dto.MainSatID}使用{xlInfo1.TwoLine}进行星历推算");
|
|
|
Serilog.Log.Information($"卫星{dto.AdjaSatID}使用{xlInfo2.TwoLine}进行星历推算");
|
|
|
- var ephMain = EphHelper.Calc(xlInfo1.TwoLine, dto.SigTime);
|
|
|
- var ephAdja = EphHelper.Calc(xlInfo2.TwoLine, dto.SigTime);
|
|
|
+ var settings = await db.SysSetings.FirstOrDefaultAsync();
|
|
|
+ var client = new HttpClient();
|
|
|
+ string url = string.Format("http://{0}:{1}/Api/", settings.ServerIp, settings.HttpPort);
|
|
|
+ var url1 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo1.TwoLine, dto.SigTime);
|
|
|
+ var response = await client.GetAsync(url1);
|
|
|
+ if (!response.IsSuccessStatusCode) // 处理响应失败
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"[{dto.MainSatID}]星厉推算失败");
|
|
|
+ return Error<PosRes>($"[{dto.MainSatID}]星厉推算失败");
|
|
|
+ }
|
|
|
+ var content = await response.Content.ReadAsStringAsync();
|
|
|
+ var ephMain = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content).data;
|
|
|
+
|
|
|
+ var url2 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo2.TwoLine, dto.SigTime);
|
|
|
+ var response2 = await client.GetAsync(url2);
|
|
|
+ if (!response2.IsSuccessStatusCode) // 处理响应失败
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"[{dto.AdjaSatID}]星厉推算失败");
|
|
|
+ return Error<PosRes>($"[{dto.AdjaSatID}]星厉推算失败");
|
|
|
+ }
|
|
|
+ var content2 = await response2.Content.ReadAsStringAsync();
|
|
|
+ var ephAdja = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
|
|
|
+ //var ephMain = EphHelper.Calc(xlInfo1.TwoLine, dto.SigTime);
|
|
|
+ //var ephAdja = EphHelper.Calc(xlInfo2.TwoLine, dto.SigTime);
|
|
|
var cgRes = db.CgRes.Add(new Model.CgRes()
|
|
|
{
|
|
|
SigTime = dto.SigTime,
|
|
|
- DtoSx = dto.SxDto,
|
|
|
- DfoSx = dto.SxDfo,
|
|
|
+ DtoSx = dto.SxDto * 1e6,
|
|
|
+ DfoSx = dto.SxDfo * 1e6,
|
|
|
SnrSx = dto.SxSnr,
|
|
|
- DtoCdb = dto.XdDto,
|
|
|
- DfoCdb = dto.XdDfo,
|
|
|
+ DtoCdb = dto.XdDto * 1e6,
|
|
|
+ DfoCdb = dto.XdDfo * 1e6,
|
|
|
SnrCdb = dto.XdSnr,
|
|
|
- YbMain = dto.MainYbDto,
|
|
|
- YbAdja = dto.AdjaYbDto,
|
|
|
+ YbMain = dto.MainYbDto * 1e6,
|
|
|
+ YbAdja = dto.AdjaYbDto * 1e6,
|
|
|
MainX = ephMain.X,
|
|
|
MainY = ephMain.Y,
|
|
|
MainZ = ephMain.Z,
|
|
|
@@ -87,6 +202,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
AdjaY = ephAdja.Y,
|
|
|
AdjaZ = ephAdja.Z,
|
|
|
});
|
|
|
+ var listTx = await db.TxInfos.ToListAsync();
|
|
|
var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
|
|
|
var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
|
|
|
var cxTx = listTx.Find(p => p.TxType == EnumTxType.Cx);
|
|
|
@@ -111,7 +227,168 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
MirrLon = res[3],
|
|
|
MirrLat = res[4],
|
|
|
};
|
|
|
- var tmp = db.PosRes.Add(posRes);
|
|
|
+ db.PosRes.Add(posRes);
|
|
|
+ await db.SaveChangesAsync();
|
|
|
+ return Success(posRes);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 融合带参定位(无星历)
|
|
|
+ /// </summary>
|
|
|
+ /// <returns>返回定位结果ID</returns>
|
|
|
+ [HttpPost]
|
|
|
+ public async Task<AjaxResult<PosRes>> PosRhNoXlAsync(RHNoXlPosDto dto)
|
|
|
+ {
|
|
|
+ using (RHDWContext db = new RHDWContext())
|
|
|
+ {
|
|
|
+ var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.RH).FirstOrDefaultAsync();
|
|
|
+ if (runTask == null)
|
|
|
+ {
|
|
|
+ Serilog.Log.Warning($"接收到融合定位参数,由于任务没有运行中忽略本次定位!");
|
|
|
+ return Error<PosRes>($"多模式融合定位平台没有启动融合定位任务");
|
|
|
+ }
|
|
|
+ var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
|
|
|
+ var parameter2 = new SQLiteParameter("@satcode", dto.MainSatID);
|
|
|
+ var parameter3 = new SQLiteParameter("@satcode", dto.AdjaSatID);
|
|
|
+ var xlInfo1 = await db.XlInfos.SqlQuery("select * from XlInfo where ABS(JULIANDAY(TimeBJ)-JULIANDAY(@sigTime))=(select min(ABS(JULIANDAY(TimeBJ)-JULIANDAY(@sigTime))) from XlInfo where satcode=@satcode)", parameter1, parameter2).FirstOrDefaultAsync();
|
|
|
+ if (xlInfo1 == null)
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"未找到卫星[{dto.MainSatID}]的双行根数星历");
|
|
|
+ return Error<PosRes>($"未找到卫星[{dto.MainSatID}]的双行根数星历");
|
|
|
+ }
|
|
|
+
|
|
|
+ var xlInfo2 = await db.XlInfos.SqlQuery("select * from XlInfo where ABS(JULIANDAY(TimeBJ)-JULIANDAY(@sigTime))=(select min(ABS(JULIANDAY(TimeBJ)-JULIANDAY(@sigTime))) from XlInfo where satcode=@satcode)", parameter1, parameter3).FirstOrDefaultAsync();
|
|
|
+ if (xlInfo2 == null)
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"未找到卫星[{dto.AdjaSatID}]的双行根数星历");
|
|
|
+ return Error<PosRes>($"未找到卫星[{dto.AdjaSatID}]的双行根数星历");
|
|
|
+ }
|
|
|
+ Serilog.Log.Information($"卫星{dto.MainSatID}使用{xlInfo1.TwoLine}进行星历推算");
|
|
|
+ Serilog.Log.Information($"卫星{dto.AdjaSatID}使用{xlInfo2.TwoLine}进行星历推算");
|
|
|
+ var settings = await db.SysSetings.FirstOrDefaultAsync();
|
|
|
+ var client = new HttpClient();
|
|
|
+ string url = string.Format("http://{0}:{1}/Api/", settings.ServerIp, settings.HttpPort);
|
|
|
+ var url1 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo1.TwoLine, dto.SigTime);
|
|
|
+ var response = await client.GetAsync(url1);
|
|
|
+ if (!response.IsSuccessStatusCode) // 处理响应失败
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"[{dto.MainSatID}]星厉推算失败");
|
|
|
+ return Error<PosRes>($"[{dto.MainSatID}]星厉推算失败");
|
|
|
+ }
|
|
|
+ var content = await response.Content.ReadAsStringAsync();
|
|
|
+ var ephMain = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content).data;
|
|
|
+
|
|
|
+ var url2 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo2.TwoLine, dto.SigTime);
|
|
|
+ var response2 = await client.GetAsync(url2);
|
|
|
+ if (!response2.IsSuccessStatusCode) // 处理响应失败
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"[{dto.AdjaSatID}]星厉推算失败");
|
|
|
+ return Error<PosRes>($"[{dto.AdjaSatID}]星厉推算失败");
|
|
|
+ }
|
|
|
+ var content2 = await response2.Content.ReadAsStringAsync();
|
|
|
+ var ephAdja = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
|
|
|
+ //var ephMain = EphHelper.Calc(xlInfo1.TwoLine, dto.SigTime);
|
|
|
+ //var ephAdja = EphHelper.Calc(xlInfo2.TwoLine, dto.SigTime);
|
|
|
+ var listTx = new List<TxInfo>();
|
|
|
+ var cgRes = new CgRes();
|
|
|
+ var cxRes = new CxRes();
|
|
|
+ cgRes = db.CgRes.Add(new CgRes()
|
|
|
+ {
|
|
|
+ SigTime = dto.SigTime,
|
|
|
+ DtoSx = dto.SxDto * 1e6,
|
|
|
+ DfoSx = dto.SxDfo * 1e6,
|
|
|
+ SnrSx = dto.SxSnr,
|
|
|
+ DtoCdb = dto.XdDto * 1e6,
|
|
|
+ DfoCdb = dto.XdDfo * 1e6,
|
|
|
+ SnrCdb = dto.XdSnr,
|
|
|
+ YbMain = dto.MainYbDto * 1e6,
|
|
|
+ YbAdja = dto.AdjaYbDto * 1e6,
|
|
|
+ MainX = ephMain.X,
|
|
|
+ MainY = ephMain.Y,
|
|
|
+ MainZ = ephMain.Z,
|
|
|
+ AdjaX = ephAdja.X,
|
|
|
+ AdjaY = ephAdja.Y,
|
|
|
+ AdjaZ = ephAdja.Z,
|
|
|
+ });
|
|
|
+ listTx = await db.TxInfos.ToListAsync();
|
|
|
+ cxRes = db.CxRes.Add(new CxRes()
|
|
|
+ {
|
|
|
+ SigTime = dto.SigTime,
|
|
|
+ Fx = dto.CxRes,
|
|
|
+ });
|
|
|
+
|
|
|
+ double[] resX1D1 = new double[6];
|
|
|
+ double[] resX2D1 = new double[6];
|
|
|
+ var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
|
|
|
+ var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
|
|
|
+ var cxTx = listTx.Find(p => p.TxType == EnumTxType.Cx);
|
|
|
+ var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
|
|
|
+ double[] mainSat = new double[3] { cgRes.MainX, cgRes.MainY, cgRes.MainZ };
|
|
|
+ double[] adjaSat = new double[3] { cgRes.AdjaX, cgRes.AdjaY, cgRes.AdjaZ };
|
|
|
+ double[] satStation = new double[3] { satTx.Lon, satTx.Lat, 0 };
|
|
|
+ double[] cdbStation = new double[3] { cdbTx.Lon, cdbTx.Lat, 0 };
|
|
|
+ double[] cxStation = new double[3] { cxTx.Lon, cxTx.Lat, 0 };
|
|
|
+ double[] refStation = new double[3] { refTx.Lon, refTx.Lat, 0 };
|
|
|
+ double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
|
|
|
+ double theta = cxRes.Fx;//单位°
|
|
|
+
|
|
|
+ PosApi.X1D1_POS2023_Core(mainSat, satStation, cdbStation, cxStation, refStation, zone, theta, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, resX1D1);
|
|
|
+
|
|
|
+ PosApi.X2D1_POS_Core(mainSat, adjaSat, cdbStation, satStation, satStation, satStation, satStation, satStation, refStation, zone, cgRes.DtoSx / 1e6, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, cgRes.YbAdja / 1e6, resX2D1);
|
|
|
+
|
|
|
+ double[] res = new double[] { 999, 999, 0, 999, 999, 0 };
|
|
|
+ if (PosApi.IsGeoPoint(resX1D1) && PosApi.IsGeoPoint(resX2D1))
|
|
|
+ {
|
|
|
+ res = new double[6] {
|
|
|
+ (resX1D1[0] + resX2D1[0]) / 2 + 0.003,
|
|
|
+ (resX1D1[1] + resX2D1[1]) / 2 - 0.002,
|
|
|
+ (resX1D1[2] + resX2D1[2]) / 2,
|
|
|
+ (resX1D1[3] + resX2D1[3]) / 2 + 0.003,
|
|
|
+ (resX1D1[4] + resX2D1[4]) / 2 - 0.002,
|
|
|
+ (resX1D1[5] + resX2D1[5]) / 2,
|
|
|
+ };
|
|
|
+ }
|
|
|
+ else if (PosApi.IsGeoPoint(resX1D1))
|
|
|
+ {
|
|
|
+ res = new double[6]
|
|
|
+ {
|
|
|
+ resX1D1[0] + 0.003,
|
|
|
+ resX1D1[1] - 0.002,
|
|
|
+ resX1D1[2],
|
|
|
+ resX1D1[3] + 0.003,
|
|
|
+ resX1D1[4] - 0.002,
|
|
|
+ resX1D1[5],
|
|
|
+
|
|
|
+ };
|
|
|
+ }
|
|
|
+ else if (PosApi.IsGeoPoint(resX2D1))
|
|
|
+ {
|
|
|
+ res = new double[6]
|
|
|
+ {
|
|
|
+ resX2D1[0] + 0.003,
|
|
|
+ resX2D1[1] - 0.002,
|
|
|
+ resX2D1[2],
|
|
|
+ resX2D1[3] + 0.003,
|
|
|
+ resX2D1[4] - 0.002,
|
|
|
+ resX2D1[5],
|
|
|
+
|
|
|
+ };
|
|
|
+ }
|
|
|
+ PosRes posRes = new PosRes()
|
|
|
+ {
|
|
|
+ SigTime = cgRes.SigTime,
|
|
|
+ TaskID = runTask.ID,
|
|
|
+ CxResID = cxRes.ID,
|
|
|
+ CgResID = cgRes.ID,
|
|
|
+ TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
|
+ TsName = dto.TsName,
|
|
|
+ PosLon = Math.Round(res[0], 4),
|
|
|
+ PosLat = Math.Round(res[1], 4),
|
|
|
+ MirrLon = Math.Round(res[3], 4),
|
|
|
+ MirrLat = Math.Round(res[4], 4),
|
|
|
+ };
|
|
|
+ db.PosRes.Add(posRes);
|
|
|
await db.SaveChangesAsync();
|
|
|
return Success(posRes);
|
|
|
}
|
|
|
@@ -125,24 +402,26 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
[HttpPost]
|
|
|
public async Task<AjaxResult<PosRes>> PosX1D1Async(X1D1PosDto dto)
|
|
|
{
|
|
|
- PosRes posRes = new PosRes();
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
- var tsk1X1D = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
|
|
|
- if (tsk1X1D == null)
|
|
|
+ var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
|
|
|
+ if (runTask == null)
|
|
|
{
|
|
|
Serilog.Log.Warning($"接收到一星一地测向带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
return Error<PosRes>($"多模式融合定位平台没有启动一星一地测向定位任务");
|
|
|
}
|
|
|
- var sigTime = DateTime.Now;
|
|
|
var listTx = new List<TxInfo>();
|
|
|
var cgRes = new CgRes();
|
|
|
var cxRes = new CxRes();
|
|
|
cgRes = db.CgRes.Add(new CgRes()
|
|
|
{
|
|
|
- SigTime = sigTime,
|
|
|
+ SigTime = dto.SigTime,
|
|
|
DtoSx = dto.SxDto * 1e6,
|
|
|
+ DfoSx = dto.SxDfo * 1e6,
|
|
|
+ SnrSx = dto.SxSnr,
|
|
|
DtoCdb = dto.XdDto * 1e6,
|
|
|
+ DfoCdb = dto.XdDfo * 1e6,
|
|
|
+ SnrCdb = dto.XdSnr,
|
|
|
YbMain = dto.MainYbDto * 1e6,
|
|
|
YbAdja = dto.AdjaYbDto * 1e6,
|
|
|
MainX = dto.MainX,
|
|
|
@@ -152,7 +431,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
listTx = await db.TxInfos.ToListAsync();
|
|
|
cxRes = db.CxRes.Add(new CxRes()
|
|
|
{
|
|
|
- SigTime = sigTime,
|
|
|
+ SigTime = dto.SigTime,
|
|
|
Fx = dto.CxRes,
|
|
|
});
|
|
|
double[] res = new double[6];
|
|
|
@@ -168,22 +447,23 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
|
|
|
double theta = cxRes.Fx;//单位°
|
|
|
PosApi.X1D1_POS2023_Core(mainSat, satStation, cdbStation, cxStation, refStation, zone, theta, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, res);
|
|
|
- posRes = new PosRes()
|
|
|
+ PosRes posRes = new PosRes()
|
|
|
{
|
|
|
SigTime = cgRes.SigTime,
|
|
|
- TaskID = tsk1X1D.ID,
|
|
|
+ TaskID = runTask.ID,
|
|
|
CxResID = cxRes.ID,
|
|
|
CgResID = cgRes.ID,
|
|
|
- TarName = "未知目标",
|
|
|
- TsName = "DAMA--56-115ms",
|
|
|
+ TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
|
+ TsName = dto.TsName,
|
|
|
PosLon = Math.Round(res[0], 4),
|
|
|
PosLat = Math.Round(res[1], 4),
|
|
|
MirrLon = Math.Round(res[3], 4),
|
|
|
MirrLat = Math.Round(res[4], 4),
|
|
|
};
|
|
|
db.PosRes.Add(posRes);
|
|
|
+ await db.SaveChangesAsync();
|
|
|
+ return Success(posRes);
|
|
|
}
|
|
|
- return Success(posRes);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -194,23 +474,25 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
[HttpPost]
|
|
|
public async Task<AjaxResult<PosRes>> PosX2D1Async(X2D1PosDto dto)
|
|
|
{
|
|
|
- PosRes posRes = new PosRes();
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
- var tsk2X1D = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
|
|
|
- if (tsk2X1D == null)
|
|
|
+ var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
|
|
|
+ if (runTask == null)
|
|
|
{
|
|
|
Serilog.Log.Warning($"接收到两星一地带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
|
|
|
}
|
|
|
- var sigTime = DateTime.Now;
|
|
|
var listTx = new List<TxInfo>();
|
|
|
var cgRes = new CgRes();
|
|
|
cgRes = db.CgRes.Add(new CgRes()
|
|
|
{
|
|
|
- SigTime = sigTime,
|
|
|
+ SigTime = dto.SigTime,
|
|
|
DtoSx = dto.SxDto * 1e6,
|
|
|
+ DfoSx = dto.SxDfo * 1e6,
|
|
|
+ SnrSx = dto.SxSnr,
|
|
|
DtoCdb = dto.XdDto * 1e6,
|
|
|
+ DfoCdb = dto.XdDfo * 1e6,
|
|
|
+ SnrCdb = dto.XdSnr,
|
|
|
YbMain = dto.MainYbDto * 1e6,
|
|
|
YbAdja = dto.AdjaYbDto * 1e6,
|
|
|
MainX = dto.MainX,
|
|
|
@@ -235,21 +517,22 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
double[] refStation = new double[3] { refTx.Lon, refTx.Lat, 0 };
|
|
|
double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
|
|
|
PosApi.X2D1_POS_Core(mainSat, adjaSat, cdbStation, satStation, satStation, satStation, satStation, satStation, refStation, zone, cgRes.DtoSx / 1e6, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, cgRes.YbAdja / 1e6, res);
|
|
|
- posRes = new PosRes()
|
|
|
+ PosRes posRes = new PosRes()
|
|
|
{
|
|
|
SigTime = cgRes.SigTime,
|
|
|
- TaskID = tsk2X1D.ID,
|
|
|
+ TaskID = runTask.ID,
|
|
|
CgResID = cgRes.ID,
|
|
|
- TarName = "未知目标",
|
|
|
- TsName = "DAMA-225-173ms",
|
|
|
+ TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
|
+ TsName = dto.TsName,
|
|
|
PosLon = Math.Round(res[0], 4),
|
|
|
PosLat = Math.Round(res[1], 4),
|
|
|
MirrLon = Math.Round(res[3], 4),
|
|
|
MirrLat = Math.Round(res[4], 4),
|
|
|
};
|
|
|
db.PosRes.Add(posRes);
|
|
|
+ await db.SaveChangesAsync();
|
|
|
+ return Success(posRes);
|
|
|
}
|
|
|
- return Success(posRes);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -260,24 +543,26 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
[HttpPost]
|
|
|
public async Task<AjaxResult<PosRes>> PosRhAsync(RHPosDto dto)
|
|
|
{
|
|
|
- PosRes posRes = new PosRes();
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
- var tskRh = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
|
|
|
- if (tskRh == null)
|
|
|
+ var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
|
|
|
+ if (runTask == null)
|
|
|
{
|
|
|
Serilog.Log.Warning($"接收到融合带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
|
|
|
}
|
|
|
- var sigTime = DateTime.Now;
|
|
|
var listTx = new List<TxInfo>();
|
|
|
var cgRes = new CgRes();
|
|
|
var cxRes = new CxRes();
|
|
|
cgRes = db.CgRes.Add(new CgRes()
|
|
|
{
|
|
|
- SigTime = sigTime,
|
|
|
+ SigTime = dto.SigTime,
|
|
|
DtoSx = dto.SxDto * 1e6,
|
|
|
+ DfoSx = dto.SxDfo * 1e6,
|
|
|
+ SnrSx = dto.SxSnr,
|
|
|
DtoCdb = dto.XdDto * 1e6,
|
|
|
+ DfoCdb = dto.XdDfo * 1e6,
|
|
|
+ SnrCdb = dto.XdSnr,
|
|
|
YbMain = dto.MainYbDto * 1e6,
|
|
|
YbAdja = dto.AdjaYbDto * 1e6,
|
|
|
MainX = dto.MainX,
|
|
|
@@ -290,7 +575,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
listTx = await db.TxInfos.ToListAsync();
|
|
|
cxRes = db.CxRes.Add(new CxRes()
|
|
|
{
|
|
|
- SigTime = sigTime,
|
|
|
+ SigTime = dto.SigTime,
|
|
|
Fx = dto.CxRes,
|
|
|
});
|
|
|
|
|
|
@@ -310,7 +595,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
double theta = cxRes.Fx;//单位°
|
|
|
|
|
|
PosApi.X1D1_POS2023_Core(mainSat, satStation, cdbStation, cxStation, refStation, zone, theta, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, resX1D1);
|
|
|
-
|
|
|
+
|
|
|
PosApi.X2D1_POS_Core(mainSat, adjaSat, cdbStation, satStation, satStation, satStation, satStation, satStation, refStation, zone, cgRes.DtoSx / 1e6, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, cgRes.YbAdja / 1e6, resX2D1);
|
|
|
|
|
|
double[] res = new double[] { 999, 999, 0, 999, 999, 0 };
|
|
|
@@ -351,22 +636,23 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
|
|
|
};
|
|
|
}
|
|
|
- posRes = new PosRes()
|
|
|
+ PosRes posRes = new PosRes()
|
|
|
{
|
|
|
SigTime = cgRes.SigTime,
|
|
|
- TaskID = tskRh.ID,
|
|
|
+ TaskID = runTask.ID,
|
|
|
CxResID = cxRes.ID,
|
|
|
CgResID = cgRes.ID,
|
|
|
- TarName = "未知目标",
|
|
|
- TsName = "DAMA-225-173ms",
|
|
|
+ TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
|
+ TsName = dto.TsName,
|
|
|
PosLon = Math.Round(res[0], 4),
|
|
|
PosLat = Math.Round(res[1], 4),
|
|
|
MirrLon = Math.Round(res[3], 4),
|
|
|
MirrLat = Math.Round(res[4], 4),
|
|
|
};
|
|
|
db.PosRes.Add(posRes);
|
|
|
+ await db.SaveChangesAsync();
|
|
|
+ return Success(posRes);
|
|
|
}
|
|
|
- return Success(posRes);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|