| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- using DevExpress.Xpo;
- using DevExpress.XtraEditors;
- using Ips.Library.Basic;
- using Ips.Library.DxpLib;
- using Ips.Library.Entity;
- using Ips.Sps.TskResults.Pases;
- using Ips.Sps.TskResults.Peses;
- using Ips.Sps.TskResults.Poses;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace Ips.Sps.Tools.MoveCheckes
- {
- public partial class MoveCheckForm : DevExpress.XtraEditors.XtraForm
- {
- public MoveCheckForm()
- {
- InitializeComponent();
- txtCorValType.Properties.Items.Add(EnumDisplayTextHelper.GetDisplayText(CorValueType.Dt), CorValueType.Dt, -1);
- txtCorValType.Properties.Items.Add(EnumDisplayTextHelper.GetDisplayText(CorValueType.Df), CorValueType.Df, -1);
- txtCorValType.EditValue = CorValueType.Dt;
- txtEmtProps.Properties.Items.AddEnum<EmtType>();
- }
- public MoveCheckForm(long[] ids) : this()
- {
- posIds = ids;
- }
- private long[] posIds;
- Session _session = new Session();
- private List<Pos> _posList;
- private void MoveCheckForm_Load(object sender, EventArgs e)
- {
- BindPosList();
- }
- private void BindPosList()
- {
- _posList = _session.Query<Pos>()
- .Where(m => posIds.Contains(m.Id))
- .OrderBy(m => m.SigFreq)
- .ThenBy(m => m.BandWidth)
- .ThenBy(m => m.SigTime)
- .ToList();
- bsPosList.DataSource = _posList;
- gvPosList.BestFitColumns();
- }
- private void gvPosList_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
- {
- if (e.Column == colSigFreq)
- {
- e.DisplayText = ((long)e.Value).E6m().ToString();
- }
- else if (e.Column == colBandWidth)
- {
- e.DisplayText = ((int)e.Value).E3m().ToString();
- }
- else if (e.Column == colEmtId)
- {
- if ((int)e.Value == 0)
- {
- e.DisplayText = "未知";
- }
- }
- else if (e.Column == colPosType)
- {
- var rowHandle = gvPosList.GetRowHandle(e.ListSourceRowIndex);
- var gdopErr = (int)gvPosList.GetRowCellValue(rowHandle, colGdopErr);
- if (gdopErr > 0)
- e.DisplayText = $"{EnumDisplayTextHelper.GetCachedDisplayText(e.Value)}({gdopErr * 1e-3:F1}km)";
- }
- }
- private void btnStart_Click(object sender, EventArgs e)
- {
- double fixVal, shipVal, planeVal, errVal;
- if (!double.TryParse(txtFixVal.Text, out fixVal))
- {
- MsgHelper.ShowMsg("请输入正确的固定站误差范围!");
- return;
- }
- if (!double.TryParse(txtShipVal.Text, out shipVal))
- {
- MsgHelper.ShowMsg("请输入正确的舰船误差范围!");
- return;
- }
- if (!double.TryParse(txtPlaneVal.Text, out planeVal))
- {
- MsgHelper.ShowMsg("请输入正确的飞机误差范围!");
- return;
- }
- if (!double.TryParse(txtErrVal.Text, out errVal))
- {
- MsgHelper.ShowMsg("请输入正确的无效误差范围!");
- return;
- }
- _posList.ForEach(m => m.MoveState = MoveState.None);
- grdPosList.RefreshDataSource();
- btnStart.Enabled = false;
- ExecPropCheck(fixVal, shipVal, planeVal, errVal).ContinueWith(t =>
- {
- this.Invoke(() =>
- {
- btnStart.Enabled = true;
- });
- });
- }
- private Task ExecPropCheck(double fixVal, double shipVal, double planeVal, double errVal)
- {
- return Task.Run(() =>
- {
- Task.Delay(1000).Wait();
- var corValType = (CorValueType)txtCorValType.EditValue;
- var posRels = _session.Query<PosRel>()
- .Where(m => posIds.Contains(m.PosId))
- .Where(m => m.Category == SignalCategory.TarSig)
- .ToList();
- var pesIds = posRels.Select(m => m.PesId).Distinct().ToList();
- var pesList = _session.Query<Pes>()
- .Where(m => pesIds.Contains(m.Id))
- .OrderBy(m => m.SigTime)
- .ToList();
- var maxErrVal = 0d;
- var posSigGroup = _posList.GroupBy(m => new { m.SigFreq, m.BandWidth });
- //GenSql(_posList, pesList);
- foreach (var sigPosList in posSigGroup)
- {
- Dictionary<string, Pes> prevPesDic = new Dictionary<string, Pes>();
- foreach (var pos in sigPosList.OrderBy(m => m.SigTime))
- {
- var posPesIds = posRels.Where(m => m.PosId == pos.Id).Select(m => m.PesId).ToList();
- var posPesList = pesList.Where(m => posPesIds.Contains(m.Id)).ToList();
- if (posPesList.IsNullOrEmpty())
- {
- pos.MoveState = MoveState.Stop;
- continue;
- }
- foreach (var posPes in posPesList)
- {
- var key = $"{posPes.MainSatId}_{posPes.AdjaSatId}";
- if (prevPesDic.ContainsKey(key))
- {
- var prevPes = prevPesDic[key];
- bool isMove = false;
- double leadVal, offsetVal;
- if (corValType == CorValueType.Dt)
- {
- leadVal = GeoUtil.CalcLeadDt(prevPes.Dt, pos.GetPosLLA(), prevPes.GetMainAntLLA(), prevPes.GetAdjaAntLLA(),
- prevPes.GetMainEphXYZ(), prevPes.GetAdjaEphXYZ(),
- posPes.GetMainEphXYZ(), posPes.GetAdjaEphXYZ()
- );
- offsetVal = Math.Abs(posPes.Dt - leadVal);
- }
- else
- {
- leadVal = prevPes.Df;
- offsetVal = Math.Abs(posPes.Df - leadVal);
- }
- bool isValid = offsetVal < errVal;
- if (isValid)
- maxErrVal = Math.Max(offsetVal, maxErrVal);
- isMove = offsetVal > fixVal;
- if (isMove)
- {
- if (isValid)
- {
- //如果一路时差在移动,则认为在移动
- pos.MoveState = MoveState.Move;
- }
- else
- {
- pos.MoveState = MoveState.Error;
- }
- }
- else
- {
- if (pos.MoveState == MoveState.None)
- pos.MoveState = MoveState.Stop;
- }
- prevPesDic[key] = posPes;
- }
- else
- {
- prevPesDic.Add(key, posPes);
- pos.MoveState = MoveState.Stop;
- }
- }
- }
- }
- EmtType _emtProp = EmtType.FixSation;
- if (maxErrVal > planeVal && _emtProp < EmtType.Plane)
- {
- _emtProp = EmtType.Plane;
- }
- else if (maxErrVal > shipVal && _emtProp < EmtType.Ship)
- {
- _emtProp = EmtType.Ship;
- }
- else
- {
- _emtProp = EmtType.FixSation;
- }
- this.Invoke(() =>
- {
- txtEmtProps.EditValue = _emtProp;
- grdPosList.RefreshDataSource();
- });
- });
- }
- private void gvPosList_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
- {
- if (e.Column == colMoveState)
- {
- var mvState = (MoveState)e.CellValue;
- if (mvState > MoveState.None)
- {
- e.Appearance.ForeColor = Color.White;
- }
- switch (mvState)
- {
- //case MoveState.None:
- // e.Appearance.BackColor = Color.Gray;
- // break;
- case MoveState.Stop:
- e.Appearance.BackColor = Color.Green;
- break;
- case MoveState.Move:
- e.Appearance.BackColor = Color.Red;
- break;
- case MoveState.Error:
- e.Appearance.BackColor = Color.Black;
- break;
- }
- }
- }
- private void GenSql(List<Pos> posList, List<Pes> pesList)
- {
- StringBuilder sb = new StringBuilder();
- foreach (var pos in posList)
- {
- sb.AppendLine($"update pos set posLon={pos.PosLon},poslat={pos.PosLat},MirrLon={pos.MirrLon},MirrLat={pos.MirrLat} where id={pos.Id};");
- }
- foreach (var pes in pesList)
- {
- sb.AppendLine($"update pes set dt={pes.Dt} where id={pes.Id};");
- }
- string sql = sb.ToString();
- }
- private void txtCorValType_SelectedIndexChanged(object sender, EventArgs e)
- {
- var valType = (CorValueType)txtCorValType.EditValue;
- if (valType == CorValueType.Dt)
- {
- ChangeCorValType("us");
- }
- else
- {
- ChangeCorValType("Hz");
- }
- }
- private void ChangeCorValType(string strUnit)
- {
- txtFixVal.Properties.Buttons[0].Caption = strUnit;
- txtShipVal.Properties.Buttons[0].Caption = strUnit;
- txtPlaneVal.Properties.Buttons[0].Caption = strUnit;
- txtErrVal.Properties.Buttons[0].Caption = strUnit;
- }
- }
- }
|