using DataSimulation.Repostory; using DataSimulation.Repostory.EFContext; using DataSimulation.Repostory.Model; using DevExpress.Utils.About; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraEditors.DXErrorProvider; using DevExpress.XtraGrid.Views.Grid; using DxHelper; using ExtensionsDev; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DataSimulation.Forms.EditForms { public partial class FlightImport : DevExpress.XtraEditors.XtraForm { public List Addinfo; private List simulationInfos; private List flightInfos = new List(); public FlightImport(List simulationInfos) { InitializeComponent(); this.Text = "导入航迹"; this.simulationInfos = simulationInfos; this.StartPosition = FormStartPosition.CenterParent; } private void Editor_Load(object sender, EventArgs e) { mapControl.UseDefalutOptions() .UseClearAll() .UseDistanceLine() .UseMarkDot() .UseExportImg() .UseExportXlsx() .UseExportCsv() .UseExportFlightLine() .SetMapLayerType(null); gridView1.SelectionChanged += GridView1_SelectionChanged; gridImprot.Init().UseSort().UseFilter().UseMultiSelect().UseRowNumber(); gridView1.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CheckBoxRowSelect; gridImprot.DataSource = flightInfos; gridView1.RefreshData(); } private void GridView1_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e) { var ids = gridView1.GetSelectedRows(); List selects = new List(); foreach (var id in ids) { var item = gridView1.GetRow(id) as FlightInfo; selects.Add(item); } mapControl.SetFlightLine(selects); } private async void btnSave_Click(object sender, EventArgs e) { try { var fligths = mapControl.GetFlightLine(); Addinfo = new List(); var sims = fligths.Select(f => new SimulationInfo() { SimulationName = f.FlightName, SimulationSpeed = f.Speed }); Addinfo.AddRange(sims); using (SimulationPartContext db = SimulationPartContext.GetContext(sims.First().CreateTime)) { var sinfos = db.SimulationInfos.AddRange(Addinfo); await db.SaveChangesAsync(); List ponits = new List(); foreach (var sinfo in sinfos) { var flight = fligths.FirstOrDefault(s => s.FlightName == sinfo.SimulationName); var fpoints = flight.flights.Select(f => new SimulationPonit() { SimulationId = sinfo.ID, SimulationLon = f.FlightLon, SimulationLat = f.FlightLat, }); ponits.AddRange(fpoints); } db.SimulationPonits.AddRange(ponits); await db.SaveChangesAsync(); } this.DialogResult = DialogResult.OK; } catch (Exception ex) { Serilog.Log.Error(ex, $"{this.Text}异常"); DxHelper.MsgBoxHelper.ShowError($"{this.Text}异常"); } } private List AnalysisFlight(string filePath) { List fs = new List(); try { List fights = new List(); var allLines = File.ReadAllLines(filePath); int count = 0; foreach (var item in allLines) { count++; if (count == 1) continue; var strs = item.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); if (strs.Length != 4) { throw new Exception("格式错误"); } FightDataCsv fight = new FightDataCsv(); int i = 0; fight.FlightName = strs[i++]; fight.Speed = Convert.ToDouble(strs[i++]); fight.FlightLon = Convert.ToDouble(strs[i++]); fight.FlightLat = Convert.ToDouble(strs[i++]); fights.Add(fight); } var groupfilghts = fights.GroupBy(f => f.FlightName); foreach (var flight in groupfilghts) { string name = flight.Key; if (simulationInfos.Any(m => m.SimulationName == name)) { name = $"{name}{DateTime.Now:yyyyMMddHHmmss}"; } double speed = flight.First().Speed; var fligths = flight.Select(f => new FlightData(f.FlightLon, f.FlightLat)).ToList(); FlightInfo flightInfo = new FlightInfo(name, speed); flightInfo.flights.AddRange(fligths); fs.Add(flightInfo); } } catch (Exception ex) { Serilog.Log.Error(ex, $"导入航迹解析异常:{ex.Message}"); DxHelper.MsgBoxHelper.ShowError($"导入航迹解析异常:{ex.Message}"); } return fs; } private void btnFlight_Click(object sender, EventArgs e) { flightInfos.Clear(); XtraOpenFileDialog xtraOpenFileDialog1 = new XtraOpenFileDialog(); xtraOpenFileDialog1.Multiselect = false; xtraOpenFileDialog1.Filter = "CSV文件|*.csv"; if (xtraOpenFileDialog1.ShowDialog() == DialogResult.OK) { string filePath = xtraOpenFileDialog1.FileName; var ff = AnalysisFlight(filePath); flightInfos.AddRange(ff); } gridView1.RefreshData(); gridView1.SelectAll(); mapControl.SetFlightLine(flightInfos); } } }