|
@@ -38,7 +38,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
/// </summary>
|
|
|
public class PosController : BaseController
|
|
|
{
|
|
|
- #region 带参有星历
|
|
|
+ #region 一星一地测向定位
|
|
|
/// <summary>
|
|
|
/// 一星一地测向带参定位(含星历)
|
|
|
/// </summary>
|
|
@@ -110,156 +110,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 两星一地带参定位(含星历)
|
|
|
- /// </summary>
|
|
|
- /// <param name="dto">定位参数</param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosX2D1Async(X2D1PosDto dto)
|
|
|
- {
|
|
|
- using (RHDWContext db = new RHDWContext())
|
|
|
- {
|
|
|
- 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 StationRes = db.StationRes.Add(new StationRes()
|
|
|
- {
|
|
|
- SatTxLon = dto.StationResInfo.SatTxLon,
|
|
|
- SatTxLat = dto.StationResInfo.SatTxLat,
|
|
|
- CdbTxLon = dto.StationResInfo.CdbTxLon,
|
|
|
- CdbTxLat = dto.StationResInfo.CdbTxLat,
|
|
|
- CxLon = dto.StationResInfo.CxLon,
|
|
|
- CxLat = dto.StationResInfo.CxLat,
|
|
|
- RefLon = dto.StationResInfo.RefLon,
|
|
|
- RefLat = dto.StationResInfo.RefLat,
|
|
|
- });
|
|
|
-
|
|
|
- var cgRes = db.CgRes.Add(new CgRes()
|
|
|
- {
|
|
|
- SigTime = dto.SigTime,
|
|
|
- Dto1 = dto.SxDto,
|
|
|
- Dfo1 = dto.SxDfo,
|
|
|
- Snr1 = dto.SxSnr,
|
|
|
- DtoCdb = dto.XdDto,
|
|
|
- DfoCdb = dto.XdDfo,
|
|
|
- SnrCdb = dto.XdSnr,
|
|
|
- YbMainDto = dto.MainYbDto,
|
|
|
- YbAdja1Dto = dto.AdjaYbDto,
|
|
|
- StationResID = StationRes.ID,
|
|
|
- MainX = dto.MainX,
|
|
|
- MainY = dto.MainY,
|
|
|
- MainZ = dto.MainZ,
|
|
|
- Adja1X = dto.AdjaX,
|
|
|
- Adja1Y = dto.AdjaY,
|
|
|
- Adja1Z = dto.AdjaZ,
|
|
|
- });
|
|
|
-
|
|
|
- var res = PosApi.X2D1_Pos(cgRes, StationRes);
|
|
|
-
|
|
|
- PosRes posRes = new PosRes()
|
|
|
- {
|
|
|
- SigTime = cgRes.SigTime,
|
|
|
- TaskInfoID = 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],
|
|
|
- };
|
|
|
- posRes = db.PosRes.Add(posRes);
|
|
|
- await db.SaveChangesAsync();
|
|
|
- PosObServer.Instance.Pub(posRes);
|
|
|
- return Success(posRes);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 融合带参定位(含星历)
|
|
|
- /// </summary>
|
|
|
- /// <param name="dto">定位参数</param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosRhAsync(RHPosDto dto)
|
|
|
- {
|
|
|
- using (RHDWContext db = new RHDWContext())
|
|
|
- {
|
|
|
- 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 StationRes = db.StationRes.Add(new StationRes()
|
|
|
- {
|
|
|
- SatTxLon = dto.StationResInfo.SatTxLon,
|
|
|
- SatTxLat = dto.StationResInfo.SatTxLat,
|
|
|
- CdbTxLon = dto.StationResInfo.CdbTxLon,
|
|
|
- CdbTxLat = dto.StationResInfo.CdbTxLat,
|
|
|
- CxLon = dto.StationResInfo.CxLon,
|
|
|
- CxLat = dto.StationResInfo.CxLat,
|
|
|
- RefLon = dto.StationResInfo.RefLon,
|
|
|
- RefLat = dto.StationResInfo.RefLat,
|
|
|
- });
|
|
|
-
|
|
|
- var cgRes = db.CgRes.Add(new CgRes()
|
|
|
- {
|
|
|
- SigTime = dto.SigTime,
|
|
|
- Dto1 = dto.SxDto,
|
|
|
- Dfo1 = dto.SxDfo,
|
|
|
- Snr1 = dto.SxSnr,
|
|
|
- DtoCdb = dto.XdDto,
|
|
|
- DfoCdb = dto.XdDfo,
|
|
|
- SnrCdb = dto.XdSnr,
|
|
|
- YbMainDto = dto.MainYbDto,
|
|
|
- YbAdja1Dto = dto.AdjaYbDto,
|
|
|
- StationResID = StationRes.ID,
|
|
|
- MainX = dto.MainX,
|
|
|
- MainY = dto.MainY,
|
|
|
- MainZ = dto.MainZ,
|
|
|
- Adja1X = dto.AdjaX,
|
|
|
- Adja1Y = dto.AdjaY,
|
|
|
- Adja1Z = dto.AdjaZ,
|
|
|
- });
|
|
|
-
|
|
|
- var cxRes = db.CxRes.Add(new CxRes()
|
|
|
- {
|
|
|
- SigTime = dto.SigTime,
|
|
|
- Fx = dto.CxRes,
|
|
|
- });
|
|
|
-
|
|
|
- var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
|
|
|
-
|
|
|
- PosRes posRes = new PosRes()
|
|
|
- {
|
|
|
- SigTime = cgRes.SigTime,
|
|
|
- TaskInfoID = runTask.ID,
|
|
|
- CxResID = cxRes.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],
|
|
|
- };
|
|
|
- posRes = db.PosRes.Add(posRes);
|
|
|
- await db.SaveChangesAsync();
|
|
|
- PosObServer.Instance.Pub(posRes);
|
|
|
- return Success(posRes);
|
|
|
- }
|
|
|
- }
|
|
|
- #endregion
|
|
|
-
|
|
|
- #region 带参无星历
|
|
|
- /// <summary>
|
|
|
- /// 一星一地带参定位(无星历)
|
|
|
+ /// 一星一地测向带参定位(无星历)
|
|
|
/// </summary>
|
|
|
/// <returns>返回定位结果ID</returns>
|
|
|
[HttpPost]
|
|
@@ -346,62 +197,25 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
return Success(posRes);
|
|
|
}
|
|
|
}
|
|
|
+ #endregion
|
|
|
|
|
|
+ #region 两星一地定位
|
|
|
/// <summary>
|
|
|
- /// 两星一地带参定位(无星历)
|
|
|
+ /// 两星一地带参定位(含星历)
|
|
|
/// </summary>
|
|
|
- /// <returns>返回定位结果ID</returns>
|
|
|
+ /// <param name="dto">定位参数</param>
|
|
|
+ /// <returns></returns>
|
|
|
[HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosX2D1NoXlAsync(X2D1NoXlPosDto dto)
|
|
|
+ public async Task<AjaxResult<PosRes>> PosX2D1Async(X2D1PosDto dto)
|
|
|
{
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
- var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
|
|
|
+ var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
|
|
|
if (runTask == null)
|
|
|
{
|
|
|
- Serilog.Log.Warning($"接收到两星一地带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
+ 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/", IpHelper.GetLocalIp(), 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 StationRes = db.StationRes.Add(new StationRes()
|
|
|
{
|
|
@@ -415,7 +229,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
RefLat = dto.StationResInfo.RefLat,
|
|
|
});
|
|
|
|
|
|
- var cgRes = db.CgRes.Add(new Model.CgRes()
|
|
|
+ var cgRes = db.CgRes.Add(new CgRes()
|
|
|
{
|
|
|
SigTime = dto.SigTime,
|
|
|
Dto1 = dto.SxDto,
|
|
@@ -427,19 +241,19 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
YbMainDto = dto.MainYbDto,
|
|
|
YbAdja1Dto = dto.AdjaYbDto,
|
|
|
StationResID = StationRes.ID,
|
|
|
- MainX = ephMain.X,
|
|
|
- MainY = ephMain.Y,
|
|
|
- MainZ = ephMain.Z,
|
|
|
- Adja1X = ephAdja.X,
|
|
|
- Adja1Y = ephAdja.Y,
|
|
|
- Adja1Z = ephAdja.Z,
|
|
|
+ MainX = dto.MainX,
|
|
|
+ MainY = dto.MainY,
|
|
|
+ MainZ = dto.MainZ,
|
|
|
+ Adja1X = dto.AdjaX,
|
|
|
+ Adja1Y = dto.AdjaY,
|
|
|
+ Adja1Z = dto.AdjaZ,
|
|
|
});
|
|
|
|
|
|
var res = PosApi.X2D1_Pos(cgRes, StationRes);
|
|
|
|
|
|
PosRes posRes = new PosRes()
|
|
|
{
|
|
|
- SigTime = dto.SigTime,
|
|
|
+ SigTime = cgRes.SigTime,
|
|
|
TaskInfoID = runTask.ID,
|
|
|
CgResID = cgRes.ID,
|
|
|
TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
@@ -457,19 +271,19 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 融合带参定位(无星历)
|
|
|
+ /// 两星一地带参定位(无星历)
|
|
|
/// </summary>
|
|
|
/// <returns>返回定位结果ID</returns>
|
|
|
[HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosRhNoXlAsync(RHNoXlPosDto dto)
|
|
|
+ public async Task<AjaxResult<PosRes>> PosX2D1NoXlAsync(X2D1NoXlPosDto dto)
|
|
|
{
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
- var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.RH).FirstOrDefaultAsync();
|
|
|
+ var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
|
|
|
if (runTask == null)
|
|
|
{
|
|
|
- Serilog.Log.Warning($"接收到融合带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
- return Error<PosRes>($"多模式融合定位平台没有启动融合定位任务");
|
|
|
+ Serilog.Log.Warning($"接收到两星一地带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
+ return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
|
|
|
}
|
|
|
var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
|
|
|
var parameter2 = new SQLiteParameter("@satcode", dto.MainSatID);
|
|
@@ -524,7 +338,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
RefLat = dto.StationResInfo.RefLat,
|
|
|
});
|
|
|
|
|
|
- var cgRes = db.CgRes.Add(new CgRes()
|
|
|
+ var cgRes = db.CgRes.Add(new Model.CgRes()
|
|
|
{
|
|
|
SigTime = dto.SigTime,
|
|
|
Dto1 = dto.SxDto,
|
|
@@ -544,19 +358,12 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
Adja1Z = ephAdja.Z,
|
|
|
});
|
|
|
|
|
|
- var cxRes = db.CxRes.Add(new CxRes()
|
|
|
- {
|
|
|
- SigTime = dto.SigTime,
|
|
|
- Fx = dto.CxRes,
|
|
|
- });
|
|
|
-
|
|
|
- var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
|
|
|
+ var res = PosApi.X2D1_Pos(cgRes, StationRes);
|
|
|
|
|
|
PosRes posRes = new PosRes()
|
|
|
{
|
|
|
- SigTime = cgRes.SigTime,
|
|
|
+ SigTime = dto.SigTime,
|
|
|
TaskInfoID = runTask.ID,
|
|
|
- CxResID = cxRes.ID,
|
|
|
CgResID = cgRes.ID,
|
|
|
TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
|
TsName = dto.TsName,
|
|
@@ -571,24 +378,22 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
return Success(posRes);
|
|
|
}
|
|
|
}
|
|
|
- #endregion
|
|
|
|
|
|
- #region 无参有星历
|
|
|
/// <summary>
|
|
|
- /// 一星一地测向无参定位(含星历)(无算法)
|
|
|
+ /// 两星一地无参定位(含星历)
|
|
|
/// </summary>
|
|
|
/// <param name="dto">定位参数</param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosX1D1NoParAsync(X1D1NoParPosDto dto)
|
|
|
+ public async Task<AjaxResult<PosRes>> PosX2D1NoParAsync(X2D1NoParPosDto dto)
|
|
|
{
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
- var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
|
|
|
+ var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
|
|
|
if (runTask == null)
|
|
|
{
|
|
|
- Serilog.Log.Warning($"接收到一星一地测向无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
- return Error<PosRes>($"多模式融合定位平台没有启动一星一地测向定位任务");
|
|
|
+ Serilog.Log.Warning($"接收到两星一地无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
+ return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
|
|
|
}
|
|
|
|
|
|
var StationRes = db.StationRes.Add(new StationRes()
|
|
@@ -606,28 +411,27 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
var cgRes = db.CgRes.Add(new CgRes()
|
|
|
{
|
|
|
SigTime = dto.SigTime,
|
|
|
+ Dto1 = dto.SxDto,
|
|
|
+ Dfo1 = dto.SxDfo,
|
|
|
+ Snr1 = dto.SxSnr,
|
|
|
DtoCdb = dto.XdDto,
|
|
|
DfoCdb = dto.XdDfo,
|
|
|
- StationResID = StationRes.ID,
|
|
|
SnrCdb = dto.XdSnr,
|
|
|
+ StationResID = StationRes.ID,
|
|
|
MainX = dto.MainX,
|
|
|
MainY = dto.MainY,
|
|
|
MainZ = dto.MainZ,
|
|
|
+ Adja1X = dto.AdjaX,
|
|
|
+ Adja1Y = dto.AdjaY,
|
|
|
+ Adja1Z = dto.AdjaZ,
|
|
|
});
|
|
|
|
|
|
- var cxRes = db.CxRes.Add(new CxRes()
|
|
|
- {
|
|
|
- SigTime = dto.SigTime,
|
|
|
- Fx = dto.CxRes,
|
|
|
- });
|
|
|
+ var res = PosApi.X2D1_PosNoRef(cgRes, StationRes);
|
|
|
|
|
|
- var res = new double[6];
|
|
|
- //PosApi.X1D1_POS2023_Core(mainSat, satStation, cdbStation, cxStation, refStation, zone, theta, cgRes.DtoCdb.Value / 1e6, cgRes.YbMain.Value / 1e6, res);
|
|
|
PosRes posRes = new PosRes()
|
|
|
{
|
|
|
SigTime = cgRes.SigTime,
|
|
|
TaskInfoID = runTask.ID,
|
|
|
- CxResID = cxRes.ID,
|
|
|
CgResID = cgRes.ID,
|
|
|
TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
|
TsName = dto.TsName,
|
|
@@ -636,6 +440,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
MirrLon = res[3],
|
|
|
MirrLat = res[4],
|
|
|
};
|
|
|
+
|
|
|
posRes = db.PosRes.Add(posRes);
|
|
|
await db.SaveChangesAsync();
|
|
|
PosObServer.Instance.Pub(posRes);
|
|
@@ -644,21 +449,60 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 两星一地无参定位(含星历)
|
|
|
+ /// 两星一地无参定位(无星历)
|
|
|
/// </summary>
|
|
|
- /// <param name="dto">定位参数</param>
|
|
|
- /// <returns></returns>
|
|
|
+ /// <returns>返回定位结果ID</returns>
|
|
|
[HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosX2D1NoParAsync(X2D1NoParPosDto dto)
|
|
|
+ public async Task<AjaxResult<PosRes>> PosX2D1NoXlNoParAsync(X2D1NoXlNoParlPosDto dto)
|
|
|
{
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
- var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
|
|
|
+ var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
|
|
|
if (runTask == null)
|
|
|
{
|
|
|
- Serilog.Log.Warning($"接收到两星一地无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
+ 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/", IpHelper.GetLocalIp(), 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 StationRes = db.StationRes.Add(new StationRes()
|
|
|
{
|
|
@@ -672,7 +516,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
RefLat = dto.StationResInfo.RefLat,
|
|
|
});
|
|
|
|
|
|
- var cgRes = db.CgRes.Add(new CgRes()
|
|
|
+ var cgRes = db.CgRes.Add(new Model.CgRes()
|
|
|
{
|
|
|
SigTime = dto.SigTime,
|
|
|
Dto1 = dto.SxDto,
|
|
@@ -682,19 +526,19 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
DfoCdb = dto.XdDfo,
|
|
|
SnrCdb = dto.XdSnr,
|
|
|
StationResID = StationRes.ID,
|
|
|
- MainX = dto.MainX,
|
|
|
- MainY = dto.MainY,
|
|
|
- MainZ = dto.MainZ,
|
|
|
- Adja1X = dto.AdjaX,
|
|
|
- Adja1Y = dto.AdjaY,
|
|
|
- Adja1Z = dto.AdjaZ,
|
|
|
+ MainX = ephMain.X,
|
|
|
+ MainY = ephMain.Y,
|
|
|
+ MainZ = ephMain.Z,
|
|
|
+ Adja1X = ephAdja.X,
|
|
|
+ Adja1Y = ephAdja.Y,
|
|
|
+ Adja1Z = ephAdja.Z,
|
|
|
});
|
|
|
|
|
|
var res = PosApi.X2D1_PosNoRef(cgRes, StationRes);
|
|
|
|
|
|
PosRes posRes = new PosRes()
|
|
|
{
|
|
|
- SigTime = cgRes.SigTime,
|
|
|
+ SigTime = dto.SigTime,
|
|
|
TaskInfoID = runTask.ID,
|
|
|
CgResID = cgRes.ID,
|
|
|
TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
@@ -705,27 +549,29 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
MirrLat = res[4],
|
|
|
};
|
|
|
|
|
|
- posRes= db.PosRes.Add(posRes);
|
|
|
+ posRes = db.PosRes.Add(posRes);
|
|
|
await db.SaveChangesAsync();
|
|
|
PosObServer.Instance.Pub(posRes);
|
|
|
return Success(posRes);
|
|
|
}
|
|
|
}
|
|
|
+ #endregion
|
|
|
|
|
|
+ #region 融合定位
|
|
|
/// <summary>
|
|
|
- /// 融合无参定位(含星历)(无算法)
|
|
|
+ /// 融合带参定位(含星历)
|
|
|
/// </summary>
|
|
|
/// <param name="dto">定位参数</param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosRhNoParAsync(RHNoParPosDto dto)
|
|
|
+ public async Task<AjaxResult<PosRes>> PosRhAsync(RHPosDto dto)
|
|
|
{
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
|
|
|
if (runTask == null)
|
|
|
{
|
|
|
- Serilog.Log.Warning($"接收到融合无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
+ Serilog.Log.Warning($"接收到融合带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
|
|
|
}
|
|
|
|
|
@@ -750,6 +596,8 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
DtoCdb = dto.XdDto,
|
|
|
DfoCdb = dto.XdDfo,
|
|
|
SnrCdb = dto.XdSnr,
|
|
|
+ YbMainDto = dto.MainYbDto,
|
|
|
+ YbAdja1Dto = dto.AdjaYbDto,
|
|
|
StationResID = StationRes.ID,
|
|
|
MainX = dto.MainX,
|
|
|
MainY = dto.MainY,
|
|
@@ -765,7 +613,7 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
Fx = dto.CxRes,
|
|
|
});
|
|
|
|
|
|
- double[] res = new double[] { 999, 999, 0, 999, 999, 0 };
|
|
|
+ var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
|
|
|
|
|
|
PosRes posRes = new PosRes()
|
|
|
{
|
|
@@ -780,45 +628,51 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
MirrLon = res[3],
|
|
|
MirrLat = res[4],
|
|
|
};
|
|
|
-
|
|
|
posRes = db.PosRes.Add(posRes);
|
|
|
await db.SaveChangesAsync();
|
|
|
PosObServer.Instance.Pub(posRes);
|
|
|
return Success(posRes);
|
|
|
}
|
|
|
}
|
|
|
- #endregion
|
|
|
|
|
|
- #region 无参无星历
|
|
|
/// <summary>
|
|
|
- /// 一星一地无参定位(无星历)(无算法)
|
|
|
+ /// 融合带参定位(无星历)
|
|
|
/// </summary>
|
|
|
/// <returns>返回定位结果ID</returns>
|
|
|
[HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosX1D1NoXlNoParAsync(X1D1NoXlNoParPosDto dto)
|
|
|
+ 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.X1D1CX).FirstOrDefaultAsync();
|
|
|
+ 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>($"多模式融合定位平台没有启动一星一地定位任务");
|
|
|
+ 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/", IpHelper.GetLocalIp(), settings.HttpPort);
|
|
|
- url += string.Format("Xl/Calc?tleStr={0}&dt={1}", xlInfo1.TwoLine, dto.SigTime);
|
|
|
- var response = await client.GetAsync(url);
|
|
|
+ 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}]星厉推算失败");
|
|
@@ -827,6 +681,16 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
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 StationRes = db.StationRes.Add(new StationRes()
|
|
|
{
|
|
|
SatTxLon = dto.StationResInfo.SatTxLon,
|
|
@@ -842,13 +706,21 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
var cgRes = db.CgRes.Add(new CgRes()
|
|
|
{
|
|
|
SigTime = dto.SigTime,
|
|
|
+ Dto1 = dto.SxDto,
|
|
|
+ Dfo1 = dto.SxDfo,
|
|
|
+ Snr1 = dto.SxSnr,
|
|
|
DtoCdb = dto.XdDto,
|
|
|
DfoCdb = dto.XdDfo,
|
|
|
SnrCdb = dto.XdSnr,
|
|
|
+ YbMainDto = dto.MainYbDto,
|
|
|
+ YbAdja1Dto = dto.AdjaYbDto,
|
|
|
StationResID = StationRes.ID,
|
|
|
MainX = ephMain.X,
|
|
|
MainY = ephMain.Y,
|
|
|
MainZ = ephMain.Z,
|
|
|
+ Adja1X = ephAdja.X,
|
|
|
+ Adja1Y = ephAdja.Y,
|
|
|
+ Adja1Z = ephAdja.Z,
|
|
|
});
|
|
|
|
|
|
var cxRes = db.CxRes.Add(new CxRes()
|
|
@@ -857,12 +729,13 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
Fx = dto.CxRes,
|
|
|
});
|
|
|
|
|
|
- var res = new double[6];
|
|
|
+ var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
|
|
|
|
|
|
PosRes posRes = new PosRes()
|
|
|
{
|
|
|
- SigTime = dto.SigTime,
|
|
|
+ SigTime = cgRes.SigTime,
|
|
|
TaskInfoID = runTask.ID,
|
|
|
+ CxResID = cxRes.ID,
|
|
|
CgResID = cgRes.ID,
|
|
|
TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
|
TsName = dto.TsName,
|
|
@@ -877,62 +750,25 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
return Success(posRes);
|
|
|
}
|
|
|
}
|
|
|
+ #endregion
|
|
|
|
|
|
+ #region 三星双时差定位
|
|
|
/// <summary>
|
|
|
- /// 两星一地无参定位(无星历)
|
|
|
+ /// 三星双时差带参定位(含星历)
|
|
|
/// </summary>
|
|
|
- /// <returns>返回定位结果ID</returns>
|
|
|
+ /// <param name="dto">定位参数</param>
|
|
|
+ /// <returns></returns>
|
|
|
[HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosX2D1NoXlNoParAsync(X2D1NoXlNoParlPosDto dto)
|
|
|
+ public async Task<AjaxResult<PosRes>> PosX3TwoDtoAsync(X3TwoDtoPosDto dto)
|
|
|
{
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
- var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
|
|
|
+ var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
|
|
|
if (runTask == null)
|
|
|
{
|
|
|
- Serilog.Log.Warning($"接收到两星一地带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
+ 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/", IpHelper.GetLocalIp(), 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 StationRes = db.StationRes.Add(new StationRes()
|
|
|
{
|
|
@@ -946,29 +782,35 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
RefLat = dto.StationResInfo.RefLat,
|
|
|
});
|
|
|
|
|
|
- var cgRes = db.CgRes.Add(new Model.CgRes()
|
|
|
+ var cgRes = db.CgRes.Add(new CgRes()
|
|
|
{
|
|
|
SigTime = dto.SigTime,
|
|
|
- Dto1 = dto.SxDto,
|
|
|
- Dfo1 = dto.SxDfo,
|
|
|
- Snr1 = dto.SxSnr,
|
|
|
- DtoCdb = dto.XdDto,
|
|
|
- DfoCdb = dto.XdDfo,
|
|
|
- SnrCdb = dto.XdSnr,
|
|
|
+ Dto1 = dto.Dto1,
|
|
|
+ Dfo1 = dto.Dfo1,
|
|
|
+ Snr1 = dto.Snr1,
|
|
|
+ Dto2 = dto.Dto2,
|
|
|
+ Dfo2 = dto.Dfo2,
|
|
|
+ Snr2 = dto.Snr2,
|
|
|
+ YbMainDto = dto.YbMainDto,
|
|
|
+ YbAdja1Dto = dto.YbAdja1Dto,
|
|
|
+ YbAdja2Dto=dto.YbAdja2Dto,
|
|
|
StationResID = StationRes.ID,
|
|
|
- MainX = ephMain.X,
|
|
|
- MainY = ephMain.Y,
|
|
|
- MainZ = ephMain.Z,
|
|
|
- Adja1X = ephAdja.X,
|
|
|
- Adja1Y = ephAdja.Y,
|
|
|
- Adja1Z = ephAdja.Z,
|
|
|
+ MainX = dto.MainX,
|
|
|
+ MainY = dto.MainY,
|
|
|
+ MainZ = dto.MainZ,
|
|
|
+ Adja1X = dto.Adja1X,
|
|
|
+ Adja1Y = dto.Adja1Y,
|
|
|
+ Adja1Z = dto.Adja1Z,
|
|
|
+ Adja2X = dto.Adja2X,
|
|
|
+ Adja2Y = dto.Adja2Y,
|
|
|
+ Adja2Z = dto.Adja2Z,
|
|
|
});
|
|
|
|
|
|
- var res = PosApi.X2D1_PosNoRef(cgRes, StationRes);
|
|
|
+ var res = PosApi.X2D1_Pos(cgRes, StationRes);
|
|
|
|
|
|
PosRes posRes = new PosRes()
|
|
|
{
|
|
|
- SigTime = dto.SigTime,
|
|
|
+ SigTime = cgRes.SigTime,
|
|
|
TaskInfoID = runTask.ID,
|
|
|
CgResID = cgRes.ID,
|
|
|
TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
@@ -978,7 +820,6 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
MirrLon = res[3],
|
|
|
MirrLat = res[4],
|
|
|
};
|
|
|
-
|
|
|
posRes = db.PosRes.Add(posRes);
|
|
|
await db.SaveChangesAsync();
|
|
|
PosObServer.Instance.Pub(posRes);
|
|
@@ -987,23 +828,24 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 融合无参定位(无星历)(无算法)
|
|
|
+ /// 三星双时差带参定位(无星历)
|
|
|
/// </summary>
|
|
|
/// <returns>返回定位结果ID</returns>
|
|
|
[HttpPost]
|
|
|
- public async Task<AjaxResult<PosRes>> PosRhNoXlNoParAsync(RHNoXlNoParPosDto dto)
|
|
|
+ public async Task<AjaxResult<PosRes>> PosX3TwoDtoNoXlAsync(X3TwoDtoNoXlPosDto dto)
|
|
|
{
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
- var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.RH).FirstOrDefaultAsync();
|
|
|
+ var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
|
|
|
if (runTask == null)
|
|
|
{
|
|
|
- Serilog.Log.Warning($"接收到融合带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
|
|
|
- return Error<PosRes>($"多模式融合定位平台没有启动融合定位任务");
|
|
|
+ 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 parameter3 = new SQLiteParameter("@satcode", dto.Adja1SatID);
|
|
|
+ var parameter4 = new SQLiteParameter("@satcode", dto.Adja2SatID);
|
|
|
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)
|
|
|
{
|
|
@@ -1014,13 +856,22 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
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.Error($"未找到卫星[{dto.Adja1SatID}]的双行根数星历");
|
|
|
+ return Error<PosRes>($"未找到卫星[{dto.Adja1SatID}]的双行根数星历");
|
|
|
+ }
|
|
|
+
|
|
|
+ var xlInfo3 = 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, parameter4).FirstOrDefaultAsync();
|
|
|
+ if (xlInfo3 == null)
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"未找到卫星[{dto.Adja2SatID}]的双行根数星历");
|
|
|
+ return Error<PosRes>($"未找到卫星[{dto.Adja2SatID}]的双行根数星历");
|
|
|
}
|
|
|
Serilog.Log.Information($"卫星{dto.MainSatID}使用{xlInfo1.TwoLine}进行星历推算");
|
|
|
- Serilog.Log.Information($"卫星{dto.AdjaSatID}使用{xlInfo2.TwoLine}进行星历推算");
|
|
|
+ Serilog.Log.Information($"卫星{dto.Adja1SatID}使用{xlInfo2.TwoLine}进行星历推算");
|
|
|
+ Serilog.Log.Information($"卫星{dto.Adja2SatID}使用{xlInfo3.TwoLine}进行星历推算");
|
|
|
var settings = await db.SysSetings.FirstOrDefaultAsync();
|
|
|
var client = new HttpClient();
|
|
|
+
|
|
|
string url = string.Format("http://{0}:{1}/Api/", IpHelper.GetLocalIp(), settings.HttpPort);
|
|
|
var url1 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo1.TwoLine, dto.SigTime);
|
|
|
var response = await client.GetAsync(url1);
|
|
@@ -1036,11 +887,21 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
var response2 = await client.GetAsync(url2);
|
|
|
if (!response2.IsSuccessStatusCode) // 处理响应失败
|
|
|
{
|
|
|
- Serilog.Log.Error($"[{dto.AdjaSatID}]星厉推算失败");
|
|
|
- return Error<PosRes>($"[{dto.AdjaSatID}]星厉推算失败");
|
|
|
+ Serilog.Log.Error($"[{dto.Adja1SatID}]星厉推算失败");
|
|
|
+ return Error<PosRes>($"[{dto.Adja1SatID}]星厉推算失败");
|
|
|
}
|
|
|
var content2 = await response2.Content.ReadAsStringAsync();
|
|
|
- var ephAdja = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
|
|
|
+ var ephAdja1 = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
|
|
|
+
|
|
|
+ var url3 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo3.TwoLine, dto.SigTime);
|
|
|
+ var response3 = await client.GetAsync(url3);
|
|
|
+ if (!response3.IsSuccessStatusCode) // 处理响应失败
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"[{dto.Adja2SatID}]星厉推算失败");
|
|
|
+ return Error<PosRes>($"[{dto.Adja2SatID}]星厉推算失败");
|
|
|
+ }
|
|
|
+ var content3 = await response2.Content.ReadAsStringAsync();
|
|
|
+ var ephAdja2 = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content3).data;
|
|
|
|
|
|
var StationRes = db.StationRes.Add(new StationRes()
|
|
|
{
|
|
@@ -1054,37 +915,36 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
RefLat = dto.StationResInfo.RefLat,
|
|
|
});
|
|
|
|
|
|
- var cgRes = db.CgRes.Add(new CgRes()
|
|
|
+ var cgRes = db.CgRes.Add(new Model.CgRes()
|
|
|
{
|
|
|
SigTime = dto.SigTime,
|
|
|
- Dto1 = dto.SxDto,
|
|
|
- Dfo1 = dto.SxDfo,
|
|
|
- Snr1 = dto.SxSnr,
|
|
|
- DtoCdb = dto.XdDto,
|
|
|
- DfoCdb = dto.XdDfo,
|
|
|
- SnrCdb = dto.XdSnr,
|
|
|
+ Dto1 = dto.Dto1,
|
|
|
+ Dfo1 = dto.Dfo1,
|
|
|
+ Snr1 = dto.Snr1,
|
|
|
+ Dto2 = dto.Dto2,
|
|
|
+ Dfo2 = dto.Dfo2,
|
|
|
+ Snr2 = dto.Snr2,
|
|
|
+ YbMainDto = dto.YbMainDto,
|
|
|
+ YbAdja1Dto = dto.YbAdja1Dto,
|
|
|
+ YbAdja2Dto = dto.YbAdja2Dto,
|
|
|
StationResID = StationRes.ID,
|
|
|
MainX = ephMain.X,
|
|
|
MainY = ephMain.Y,
|
|
|
MainZ = ephMain.Z,
|
|
|
- Adja1X = ephAdja.X,
|
|
|
- Adja1Y = ephAdja.Y,
|
|
|
- Adja1Z = ephAdja.Z,
|
|
|
+ Adja1X = ephAdja1.X,
|
|
|
+ Adja1Y = ephAdja1.Y,
|
|
|
+ Adja1Z = ephAdja1.Z,
|
|
|
+ Adja2X = ephAdja2.X,
|
|
|
+ Adja2Y = ephAdja2.Y,
|
|
|
+ Adja2Z = ephAdja2.Z,
|
|
|
});
|
|
|
|
|
|
- var cxRes = db.CxRes.Add(new CxRes()
|
|
|
- {
|
|
|
- SigTime = dto.SigTime,
|
|
|
- Fx = dto.CxRes,
|
|
|
- });
|
|
|
-
|
|
|
- double[] res = new double[] { 999, 999, 0, 999, 999, 0 };
|
|
|
+ var res = PosApi.X2D1_Pos(cgRes, StationRes);
|
|
|
|
|
|
PosRes posRes = new PosRes()
|
|
|
{
|
|
|
- SigTime = cgRes.SigTime,
|
|
|
+ SigTime = dto.SigTime,
|
|
|
TaskInfoID = runTask.ID,
|
|
|
- CxResID = cxRes.ID,
|
|
|
CgResID = cgRes.ID,
|
|
|
TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
|
|
|
TsName = dto.TsName,
|
|
@@ -1101,6 +961,14 @@ namespace XdCxRhDW.App.WebAPI
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
+ #region 三星双频差定位
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 双星时频差定位
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 查询定位结果(暂未实现)
|
|
|
/// </summary>
|