/// <summary> /// Adds an overlay of markers to the map. Attempts to retreive the overlay data if it already exists /// otherwise the overlay is created and displayed on the map. /// </summary> /// <param name="trackData">Track data to be displayed</param> void AddMarkerOverlay(TrackGridData trackData) { GMapOverlay markersOverlay; if (!overlays.TryGetValue(trackData.Track, out markersOverlay)) { markersOverlay = new GMapOverlay(); foreach (GpsPoint point in trackData.Track.Points) { AddMarker(markersOverlay, point, trackData.Marker); } overlays[trackData.Track] = markersOverlay; } gMap.Overlays.Add(markersOverlay); gMap.Refresh(); //bug in GMap places new points at wrong position double zoom = gMap.Zoom; gMap.Zoom = zoom - 1; gMap.Zoom = zoom; }
private void LoadTracks(string[] fileNames) { GpsLogParser p; foreach (string file in fileNames) { p = new GpsLogParser(file); GpsTrack track = p.ReadGpsLog(); TrackGridData data = new TrackGridData(track, file); AddTrackToGrid(data); } }
/// <summary> /// Modifies existing overlays with new data (currently only in the form of a different marker. /// </summary> /// <param name="data"></param> /// <remarks>Read-write settings for the map data means that if the data is currently displayed on the /// map the only way to modify it is to delete it and make a new overlay with updated data.</remarks> void UpdateTrackOverlay(TrackGridData data) { GMapOverlay overlay; if (overlays.TryGetValue(data.Track, out overlay)) { // a replacement overlay is not generated until it is needed for display. overlays.Remove(data.Track); // if the data exists as an overlay on the map it means it is currently being displayed and will need to be redrawn if (gMap.Overlays.Contains(overlay)) { gMap.Overlays.Remove(overlay); AddMarkerOverlay(data); } } }
/// <summary> /// Currently the only cell value that the user can modify is the check box that determines if the track data is displayed on the map /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tracksGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == Display.Index && e.RowIndex != -1) { DataGridViewRow row = tracksGridView.Rows[e.RowIndex]; TrackGridData trackData = (TrackGridData)row.Tag; if ((bool)row.Cells[Display.Index].Value) { AddMarkerOverlay(trackData); } else { gMap.Overlays.Remove(overlays[trackData.Track]); } } gMap.Refresh(); }
void AddTrackToGrid(TrackGridData trackData) { DataGridViewRow row = (DataGridViewRow)tracksGridView.RowTemplate.Clone(); row.CreateCells(tracksGridView); row.Cells[Display.Index].Value = false; row.Cells[displayFormat.Index].Value = "Edit"; row.Cells[startTime.Index].Value = trackData.Track.StartPretty; row.Cells[endTime.Index].Value = trackData.Track.EndPretty; row.Cells[minLatitude.Index].Value = trackData.Track.MinLatitudePretty; row.Cells[maxLatitude.Index].Value = trackData.Track.MaxLatitudePretty; row.Cells[minLongitude.Index].Value = trackData.Track.MinLongitudePretty; row.Cells[maxLongitude.Index].Value = trackData.Track.MaxLongitudePretty; row.Tag = trackData; tracksGridView.Rows.Add(row); //false, track.StartDate, track.EndDate, track.MinLatitude, track.MaxLatitude, track.MinLongitude, track.MaxLongitude); UpdateGridSize(); }
/// <summary> /// Currently only handles clicks to the "Format Edit" button for changing the parker image of a track. /// Launches a new window for selecting the marker type. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tracksGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { var senderGrid = (DataGridView)sender; if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0) { TrackGridData data = (TrackGridData)senderGrid.Rows[e.RowIndex].Tag; using (var f = new Markers(data.Marker)) { var result = f.ShowDialog(); if (result == DialogResult.OK && f.Marker != data.Marker) { TrackGridData newData = new TrackGridData(data.Track, data.FileName); newData.Marker = f.Marker; senderGrid.Rows[e.RowIndex].Tag = newData; UpdateTrackOverlay(newData); } } } }
public TimeDistanceFilterForm(TrackGridData trackData) { InitializeComponent(); this.trackData = trackData; }