/// <summary> /// Initializing Controls /// </summary> private void InitControls() { try { // Вкладка №0 TrackNameTextBox.Text = $"Test track - ({DateTime.Now:HH:mm:ss dd.MM.yy})"; _track = new ImitationTrack(); _track.Author = "User1"; _track.Description = "Put here your description..."; _pinStart = new Pushpin { Content = "A" }; // Start marker _pinEnd = new Pushpin { Content = "B" }; // End marker _pinCar = new Pushpin // A marker for playing a route { Content = "->", Background = new SolidColorBrush(Color.FromRgb(53, 196, 53)) }; NewGpsDevices = new ObservableRangeCollection <GpsDevice>(); TrackPositions = new ObservableRangeCollection <TrackPosition>(); OsrmWayPointsPushpins = new ObservableRangeCollection <DraggablePin>(); NewImitationTrackGpsDevicesDataGrid.ItemsSource = NewGpsDevices; TrackPositionsDataGrid.ItemsSource = TrackPositions; WayPointsForOsrmDataGrid.ItemsSource = OsrmWayPointsPushpins; NewGpsDevices.Add(new GpsDevice(0) { Imei = "000002245678915" }); NewGpsDevices.Add(new GpsDevice(0) { Imei = "444555678154689" }); foreach (var item in TabControlItems.Items) { _tabItemsIsValidCollection.Add(new bool()); } Player.Timer.Tick += Timer_Tick; Player.PlayerSlider.ValueChanged += PlayerSlider_ValueChanged; TrackPositions.CollectionChanged += TrackPositions_CollectionChanged; Player.CurrentPosition = 0; CommonData.DataContext = _track; TotalView.DataContext = _track; } catch (Exception exc) { LogWindowControl.AddMessage(exc.ToString()); } }
private async Task InitAndDrowTrack(TrackPosition[] points) { TrackPositions.Clear(); MapPolyline.Locations?.Clear(); Player.CurrentPosition = 0; if (points == null || !points.Any()) { LogWindowControl.AddMessage($"No data..."); return; } TrackPositions.AddRange(points); if (points.Any()) { foreach (var device in NewGpsDevices) { device.TrackPositionsCount = TrackPositions.Count; } } if (!TrackPositions.Any()) { foreach (var device in NewGpsDevices) { device.TrackPositionsCount = 0; } return; } LogWindowControl.AddMessage($"Loaded {TrackPositions.Count} points."); LogWindowControl.AddMessage($"Drowing route..."); MapPolyline.Locations = await ConvertTrackPositionsToLocations(TrackPositions); MainMap.Center = MapPolyline.Locations.FirstOrDefault(); _pinStart.Location = MapPolyline.Locations.First(); _pinEnd.Location = MapPolyline.Locations.Last(); _pinCar.Location = MapPolyline.Locations.First(); if (!MainMap.Children.Contains(_pinStart)) { MainMap.Children.Add(_pinStart); } if (!MainMap.Children.Contains(_pinEnd)) { MainMap.Children.Add(_pinEnd); } LogWindowControl.AddMessage($"Completed"); CheckTabItems(); }
/// <summary> /// Save/Export created track /// </summary> private void SaveCreatedTrack() { try { if (_track != null) { // TODO Put here you custum code throw new NotImplementedException("Need to create save/export implementation"); } } catch (Exception exc) { LogWindowControl.AddMessage(exc.ToString()); } }
/// <summary> /// Building a route from Osrm data /// </summary> /// <param name="waypoints"></param> /// <returns></returns> private async Task GetDataFromOsrm(TrackPosition[] waypoints) { if (waypoints.Length > 1) { LogWindowControl.AddMessage($"Creation of a route (provider OSRM)"); var newOsrmPositions = await _provider.CreateTrack(waypoints); await InitAndDrowTrack(newOsrmPositions); } else { LogWindowControl.AddMessage($"There are not enough points to build a route - you need at least 2 points"); } }
/// <summary> /// Clone track /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CloneTrackButton_OnClick(object sender, RoutedEventArgs e) { var result = MessageBox.Show($"Do you want to save the current track?", "Saving data", MessageBoxButton.OKCancel, MessageBoxImage.Information); if (result.Equals(MessageBoxResult.OK)) { SaveCreatedTrack(); } _track = _track.Clone() as ImitationTrack; if (_track != null) { _track.Name = _track.Name += " Cloned at " + DateTime.Now.ToString("HH:mm:ss dd.MM.yyyy"); TrackNameTextBox.Text = _track.Name; LogWindowControl.AddMessage($"The track was successfully cloned as { _track.Name }"); } }
/// <summary> /// Build a route based on Osrm /// </summary> /// <returns></returns> private async Task GetLoadOsrmTrack() { try { MapPolyline.Locations?.Clear(); // Delete the current route var trackPositions = OsrmWayPointsPushpins.Select( point => new TrackPosition { Latitude = point.Location.Latitude, Longitude = point.Location.Longitude }) .ToArray(); await GetDataFromOsrm(trackPositions); } catch (Exception exc) { LogWindowControl.AddMessage(exc.Message); } }