private TracksOptimiserOptions GetTrackOptions() { TracksOptimiserOptions options = new TracksOptimiserOptions(); options.TrackColor = btnTrackColor.ForeColor; options.TrackWidth = (int)numTrackWidth.Value; options.TracksStyles = (TracksStyles)cmbPlotStyle.SelectedIndex; options.BackgroundColor = btnTrackBakground.BackColor; options.BackgroundColor2 = btnTrackBakground2.BackColor; options.TrackBackgroundWidth = Convert.ToDouble(numBakgroundWidth.Value); options.TrackBackground2Width = Convert.ToDouble(numBakground2Width.Value); options.DisconnectGapPoints = chkDisconnectGapPoints.Checked; options.DisconnectTrackGapsMultiple = Convert.ToDouble(numDisconnectTrackGaps.Value); return(options); }
public void Run(GMapControl gMap, List <Geo.Gps.Track> tracks, TracksOptimiserOptions options) { if (tracks == null) { return; } this.gMap = gMap; this.options = options; int minPixels = 10; switch (options.TracksStyles) { case TracksStyles.Simple: minPixels = 3; break; case TracksStyles.With_background: minPixels = 7; break; default: break; } double minimimDistance = minPixels /* at least 3 pixels */ * gMap.ViewArea.WidthLng / gMap.Size.Width; int oldCount = 0, newCount = 0; GMapOverlay tracksPolygonsOverlay = FindOverlay(Constants.TracksPolygonsId, gMap); GMapOverlay tracksPolygons2Overlay = FindOverlay(Constants.TracksPolygons2Id, gMap); GMapOverlay tracksPolygons3Overlay = FindOverlay(Constants.TracksPolygons3Id, gMap); if (tracksPolygonsOverlay == null) { tracksPolygonsOverlay = new GMapOverlay(Constants.TracksPolygonsId); tracksPolygons2Overlay = new GMapOverlay(Constants.TracksPolygons2Id); tracksPolygons3Overlay = new GMapOverlay(Constants.TracksPolygons3Id); gMap.Overlays.Add(tracksPolygons3Overlay); gMap.Overlays.Add(tracksPolygons2Overlay); gMap.Overlays.Add(tracksPolygonsOverlay); } tracksPolygonsOverlay.Routes.Clear(); tracksPolygons2Overlay.Routes.Clear(); tracksPolygons3Overlay.Routes.Clear(); foreach (var track in tracks) { Geo.Gps.Fix lastPoint = track.GetFirstFix(); string tagName = lastPoint.TimeUtc.ToShortDateString() + " " + lastPoint.TimeUtc.ToShortTimeString(); if (track.Metadata.ContainsKey("name")) { tagName += "; " + track.Metadata["name"].ToString(); } if (track.Metadata.ContainsKey("filename")) { tagName += "; " + track.Metadata["filename"].ToString(); } // add route for each segment, segments may be separate foreach (var segment in track.Segments) { List <PointLatLng> mapPoints = new List <PointLatLng>(); lastPoint = segment.GetFirstFix(); mapPoints.Add(new PointLatLng(lastPoint.Coordinate.Latitude, lastPoint.Coordinate.Longitude)); foreach (var point in segment.Fixes) { if (AddPoint(mapPoints, lastPoint, point, minimimDistance, tagName)) { lastPoint = point; newCount++; } oldCount++; } // always add last point, single gpx file may be divided by tracks if (segment.GetLastFix() != lastPoint) { Geo.Gps.Fix newPoint = segment.GetLastFix(); mapPoints.Add(new PointLatLng(newPoint.Coordinate.Latitude, newPoint.Coordinate.Longitude)); } if (mapPoints.Count > 1) { AddRoute(mapPoints, tagName); } } } double ratio = (double)newCount / oldCount * 100; Info = "Map points: " + newCount + " (" + ratio.ToString("F0") + "%)"; gMap.Refresh(); }