FlightImport.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. using DataSimulation.Repostory;
  2. using DataSimulation.Repostory.EFContext;
  3. using DataSimulation.Repostory.Model;
  4. using DevExpress.Utils.About;
  5. using DevExpress.XtraEditors;
  6. using DevExpress.XtraEditors.Controls;
  7. using DevExpress.XtraEditors.DXErrorProvider;
  8. using DxHelper;
  9. using ExtensionsDev;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.ComponentModel;
  13. using System.Data;
  14. using System.Data.Entity;
  15. using System.Data.Entity.Migrations;
  16. using System.Drawing;
  17. using System.IO;
  18. using System.Linq;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21. using System.Windows.Forms;
  22. namespace DataSimulation.Forms.EditForms
  23. {
  24. public partial class FlightImport : DevExpress.XtraEditors.XtraForm
  25. {
  26. public List<SimulationInfo> Addinfo;
  27. private List<SimulationInfo> simulationInfos;
  28. private List<FlightInfo> flightInfos;
  29. public FlightImport(List<SimulationInfo> simulationInfos)
  30. {
  31. InitializeComponent();
  32. this.Text = "导入航迹";
  33. this.simulationInfos = simulationInfos;
  34. this.StartPosition = FormStartPosition.CenterParent;
  35. }
  36. private void Editor_Load(object sender, EventArgs e)
  37. {
  38. mapControl.UseDefalutOptions()
  39. .UseClearAll()
  40. .UseDistanceLine()
  41. .UseMarkDot()
  42. .UseExportImg()
  43. .UseExportXlsx()
  44. .UseExportCsv()
  45. .UseExportFlightLine()
  46. .SetMapLayerType(null);
  47. }
  48. private async void btnSave_Click(object sender, EventArgs e)
  49. {
  50. try
  51. {
  52. var fligths = mapControl.GetFlightLine<FlightInfo>();
  53. Addinfo = new List<SimulationInfo>();
  54. var sims = fligths.Select(f => new SimulationInfo() { SimulationName = f.FlightName, SimulationSpeed = f.Speed });
  55. Addinfo.AddRange(sims);
  56. using (SimulationPartContext db = SimulationPartContext.GetContext(sims.First().CreateTime))
  57. {
  58. var sinfos = db.SimulationInfos.AddRange(Addinfo);
  59. await db.SaveChangesAsync();
  60. List<SimulationPonit> ponits = new List<SimulationPonit>();
  61. foreach (var sinfo in sinfos)
  62. {
  63. var flight = fligths.FirstOrDefault(s => s.FlightName == sinfo.SimulationName);
  64. var fpoints = flight.flights.Select(f => new SimulationPonit()
  65. {
  66. SimulationId = sinfo.ID,
  67. SimulationLon = f.FlightLon,
  68. SimulationLat = f.FlightLat,
  69. });
  70. ponits.AddRange(fpoints);
  71. }
  72. db.SimulationPonits.AddRange(ponits);
  73. await db.SaveChangesAsync();
  74. }
  75. this.DialogResult = DialogResult.OK;
  76. }
  77. catch (Exception ex)
  78. {
  79. Serilog.Log.Error(ex, $"{this.Text}异常");
  80. DxHelper.MsgBoxHelper.ShowError($"{this.Text}异常");
  81. }
  82. }
  83. private List<FlightInfo> AnalysisFlight(string filePath)
  84. {
  85. List<FlightInfo> flightInfos = new List<FlightInfo>();
  86. try
  87. {
  88. List<FightDataCsv> fights = new List<FightDataCsv>();
  89. var allLines = File.ReadAllLines(filePath);
  90. int count = 0;
  91. foreach (var item in allLines)
  92. {
  93. count++;
  94. if (count == 1) continue;
  95. var strs = item.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
  96. if (strs.Length != 4)
  97. {
  98. throw new Exception("格式错误");
  99. }
  100. FightDataCsv fight = new FightDataCsv();
  101. int i = 0;
  102. fight.FlightName = strs[i++];
  103. fight.Speed = Convert.ToDouble(strs[i++]);
  104. fight.FlightLon = Convert.ToDouble(strs[i++]);
  105. fight.FlightLat = Convert.ToDouble(strs[i++]);
  106. fights.Add(fight);
  107. }
  108. var groupfilghts = fights.GroupBy(f => f.FlightName);
  109. foreach (var flight in groupfilghts)
  110. {
  111. string name = flight.Key;
  112. if (simulationInfos.Any(m => m.SimulationName == name))
  113. {
  114. name = $"{name}{DateTime.Now:yyyyMMddHHmmss}";
  115. }
  116. double speed = flight.First().Speed;
  117. var fligths = flight.Select(f => new FlightData(f.FlightLon, f.FlightLat)).ToList();
  118. FlightInfo flightInfo = new FlightInfo(name, speed);
  119. flightInfo.flights.AddRange(fligths);
  120. flightInfos.Add(flightInfo);
  121. }
  122. }
  123. catch (Exception ex)
  124. {
  125. Serilog.Log.Error(ex, $"导入航迹解析异常:{ex.Message}");
  126. DxHelper.MsgBoxHelper.ShowError($"导入航迹解析异常:{ex.Message}");
  127. }
  128. return flightInfos;
  129. }
  130. private void btnFlight_Click(object sender, EventArgs e)
  131. {
  132. flightInfos = new List<FlightInfo>();
  133. XtraOpenFileDialog xtraOpenFileDialog1 = new XtraOpenFileDialog();
  134. xtraOpenFileDialog1.Multiselect = false;
  135. xtraOpenFileDialog1.Filter = "CSV文件|*.csv";
  136. if (xtraOpenFileDialog1.ShowDialog() == DialogResult.OK)
  137. {
  138. string filePath = xtraOpenFileDialog1.FileName;
  139. flightInfos = AnalysisFlight(filePath);
  140. }
  141. try
  142. {
  143. cbAll.Properties.Items.AddRange(flightInfos.Select(m => m.FlightName).ToList());
  144. if (flightInfos.Count > 0)
  145. {
  146. cbAll.SelectedIndex = 0;
  147. mapControl.SetFlightLine(flightInfos);
  148. }
  149. }
  150. catch (Exception ex)
  151. {
  152. Serilog.Log.Error(ex, $"导入航迹异常:{ex.Message}");
  153. DxHelper.MsgBoxHelper.ShowError($"导入航迹异常:{ex.Message}");
  154. }
  155. }
  156. private void cbAll_SelectedValueChanged(object sender, EventArgs e)
  157. {
  158. if (flightInfos != null && flightInfos.Count > 0)
  159. {
  160. var name = cbAll.SelectedItem.ToString();
  161. var firstFlight = flightInfos.First(f => f.FlightName == name);
  162. this.txtFlightName.Text = firstFlight.FlightName;
  163. this.txtSpeed.Text = $"{firstFlight.Speed}";
  164. }
  165. }
  166. }
  167. }