123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- using System;
- using System.Collections.Generic;
- using System.Data.Entity;
- using System.Data.SqlClient;
- using System.Data.SQLite;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Web.Http;
- using PosResAnalysis;
- using Serilog;
- using XdCxRhDw.Dto;
- using XdCxRhDW.App.Api;
- using XdCxRhDW.App.EFContext;
- using XdCxRhDW.App.Model;
- using XdCxRhDW.App.WebAPI.DTO;
- using XdCxRhDW.Dto;
- using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
- using static XdCxRhDw.CpuCgTools.FormCpuCg;
- namespace XdCxRhDW.App.WebAPI
- {
- /// <summary>
- /// 定位功能相关接口
- /// </summary>
- public class PosController : BaseController
- {
- /// <summary>
- /// 执行两星一地定位
- /// </summary>
- /// <returns></returns>
- [HttpPost]
- public async Task<AjaxResult> PosX2D1Async(X2D1PosDto dto)
- {
- using (RHDWContext db = new RHDWContext())
- {
- var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
- if (runTask == null)
- {
- Serilog.Log.Warning($"接收到两星一地定位参数,由于任务没有运行中忽略本次定位!");
- return Error($"多模式融合定位平台没有启动两星一地定位任务");
- }
- 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);
- 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($"未找到卫星[{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($"未找到卫星[{dto.AdjaSatID}]的双行根数星历");
- }
- 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 cgRes = db.CgRes.Add(new Model.CgRes()
- {
- SigTime = dto.SigTime,
- DtoSx = dto.SxDto,
- DfoSx = dto.SxDfo,
- SnrSx = dto.SxSnr,
- DtoCdb = dto.XdDto,
- DfoCdb = dto.XdDfo,
- SnrCdb = dto.XdSnr,
- YbMain = dto.MainYbDto,
- YbAdja = dto.AdjaYbDto,
- MainX = ephMain.X,
- MainY = ephMain.Y,
- MainZ = ephMain.Z,
- AdjaX = ephAdja.X,
- AdjaY = ephAdja.Y,
- AdjaZ = ephAdja.Z,
- });
- 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] { ephMain.X, ephMain.Y, ephMain.Z };
- double[] adjaSat = new double[3] { ephAdja.X, ephAdja.Y, ephAdja.Z };
- double[] satStation = new double[3] { satTx.Lon, satTx.Lat, 0 };
- double[] cdbStation = new double[3] { cdbTx.Lon, cdbTx.Lat, 0 };
- double[] refStation = new double[3] { refTx.Lon, refTx.Lat, 0 };
- double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
- double[] res = new double[6];
- PosApi.X2D1_POS_Core(mainSat, adjaSat, cdbStation, satStation, satStation, satStation, satStation, satStation, refStation, zone, dto.SxDto / 1e6, dto.XdDto / 1e6, dto.MainYbDto / 1e6, dto.AdjaYbDto / 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();
- }
- /// <summary>
- /// 查询定位结果(暂未实现)
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- /// <exception cref="Exception"></exception>
- [HttpGet]
- public async Task<AjaxResult<PosResDto>> GetPosRes(PosResQueryDto dto)
- {
- await Task.Delay(100);
- return Error<PosResDto>("该功能暂未实现!");
- }
- }
- }
|