public void Import() { _importResult = new ImportResult(); if (BeginWork != null) { BeginWork(this, new EventArgs()); } // The trackpoints var routeSegments = new List <RouteSegment>(); var rs = new RouteSegment(); var current = 0; var total = _trackToImport.GetTrackInfo().NumbetOfTrackPoints; var elapsedTimes = new List <double>(); DateTime startTime = DateTime.MinValue; foreach (var tp in _trackToImport.GetTrackPoints()) { var waypoint = new Waypoint { Time = tp.Time, LongLat = new LongLat((double)tp.Longitude, (double)tp.Latitude), Altitude = tp.Altitude }; if (tp.HasMark(RegSEPointType.WayPoint)) { elapsedTimes.Add((tp.Time - startTime).TotalSeconds); } rs.Waypoints.Add(waypoint); current++; if (WorkProgress != null && current % 10 == 0) { WorkProgress(this, new WorkProgressEventArgs((double)current / total)); } } if (rs.Waypoints.Count > 0) { routeSegments.Add(rs); } _importResult.Route = new Route(routeSegments); // create one lap (from start to finish) LapCollection laps = RouteImporterUtil.CreateLapsFromElapsedTimes(startTime, elapsedTimes, routeSegments); _importResult.Laps = laps; _importResult.Succeeded = true; if (EndWork != null) { EndWork(this, new EventArgs()); } }
public void Import() { _importResult = new ImportResult(); if (BeginWork != null) { BeginWork(this, new EventArgs()); } // The trackpoints var routeSegments = new List <RouteSegment>(); var rs = new RouteSegment(); var current = 0; var total = _trackToImport.TrackPointsCount; var track = _gsGH615MReader.GetTrack(_trackToImport); foreach (var tp in track.GetTrackPoints()) { var waypoint = new Waypoint { Time = tp.Time, LongLat = new LongLat((double)tp.Longitude, (double)tp.Latitude), Altitude = tp.Altitude, HeartRate = tp.Pulse }; rs.Waypoints.Add(waypoint); current++; if (WorkProgress != null && current % 10 == 0) { WorkProgress(this, new WorkProgressEventArgs((double)current / total)); } } if (rs.Waypoints.Count > 0) { routeSegments.Add(rs); } _importResult.Route = new Route(routeSegments); // create one lap (from start to finish) DateTime startTime = DateTime.MinValue; LapCollection laps = RouteImporterUtil.CreateLapsFromElapsedTimes(startTime, new List <double>(), routeSegments); _importResult.Laps = laps; _importResult.Succeeded = true; if (EndWork != null) { EndWork(this, new EventArgs()); } }
public void Import() { importResult = new ImportResult(); if (BeginWork != null) { BeginWork(this, new EventArgs()); } // The trackpoints List <RouteSegment> routeSegments = new List <RouteSegment>(); bool lastTrackpointWasInvalid = false; bool thisTrackpointIsInvalid = false; RouteSegment rs = new RouteSegment(); int current = 0; int total = sessionToImport.Trackpoints.Count; foreach (D303_Trk_Point_Type tp in sessionToImport.Trackpoints) { Waypoint waypoint = new Waypoint(); waypoint.Time = tp.TimeAsDateTime; waypoint.LongLat = new LongLat(tp.Position.LongitudeAsDegrees, tp.Position.LatitudeAsDegrees); waypoint.Altitude = (double)tp.Altitude; waypoint.HeartRate = (double)tp.HeartRate; thisTrackpointIsInvalid = (tp.Position.Latitude == 2147483647 && tp.Position.Longitude == 2147483647); if (!thisTrackpointIsInvalid) { rs.Waypoints.Add(waypoint); } if (thisTrackpointIsInvalid && lastTrackpointWasInvalid && rs.Waypoints.Count > 0) { routeSegments.Add(rs); rs = new RouteSegment(); } lastTrackpointWasInvalid = thisTrackpointIsInvalid; current++; if (WorkProgress != null && current % 10 == 0) { WorkProgress(this, new WorkProgressEventArgs((double)current / total)); } } if (rs.Waypoints.Count > 0) { routeSegments.Add(rs); } // The laps List <double> elapsedTimes = new List <double>(); double elapsedTime = 0; DateTime startTime = DateTime.MinValue; foreach (D1001_Lap_Type xLap in sessionToImport.Laps) { if (startTime == DateTime.MinValue) { startTime = xLap.StartTimeAsDateTime; } elapsedTimes.Add(elapsedTime); elapsedTime += (double)xLap.TotalTime / 100; } LapCollection laps = RouteImporterUtil.CreateLapsFromElapsedTimes(startTime, elapsedTimes, routeSegments); importResult.Route = new Route(routeSegments); importResult.Laps = laps; importResult.Succeeded = true; if (EndWork != null) { EndWork(this, new EventArgs()); } }
public void Import() { importResult = new ImportResult(); if (BeginWork != null) { BeginWork(this, new EventArgs()); } XmlTextReader reader = new XmlTextReader(FileName); XPathDocument doc = new XPathDocument(reader); XPathNavigator nav = doc.CreateNavigator(); XmlNamespaceManager nsManager = new XmlNamespaceManager(nav.NameTable); nsManager.AddNamespace("ns", "http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"); XPathNodeIterator activities = nav.Select("//ns:Activity", nsManager); while (activities.MoveNext()) { XPathNavigator id = activities.Current.SelectSingleNode("ns:Id", nsManager); if (id != null && DateTime.Parse(id.Value).ToString("yyyy-MM-dd HH:mm:ss") == IdToImport) { // the activity was found // the laps XPathNodeIterator lapNodes = activities.Current.Select("ns:Lap", nsManager); List <RouteSegment> routeSegments = new List <RouteSegment>(); RouteSegment routeSegment = new RouteSegment(); while (lapNodes.MoveNext()) { // the tracks XPathNodeIterator trackNodes = lapNodes.Current.Select("ns:Track", nsManager); int trackCount = 0; while (trackNodes.MoveNext()) { if (trackCount > 0) { if (routeSegment.Waypoints.Count > 1) { routeSegments.Add(routeSegment); } routeSegment = new RouteSegment(); } XPathNodeIterator trackpointNodes = trackNodes.Current.Select("ns:Trackpoint", nsManager); DateTime lastTime = DateTime.MinValue; LongLat lastLongLat = null; int trackpointCount = 0; while (trackpointNodes.MoveNext()) { Waypoint waypoint = new Waypoint(); waypoint.Time = DateTime.Parse(trackpointNodes.Current.SelectSingleNode("ns:Time", nsManager).Value).ToUniversalTime(); XPathNavigator position = trackpointNodes.Current.SelectSingleNode("ns:Position", nsManager); if (position != null) { waypoint.LongLat = new LongLat( position.SelectSingleNode("ns:LongitudeDegrees", nsManager).ValueAsDouble, position.SelectSingleNode("ns:LatitudeDegrees", nsManager).ValueAsDouble); } if (trackpointNodes.Current.SelectSingleNode("ns:AltitudeMeters", nsManager) != null) { waypoint.Altitude = trackpointNodes.Current.SelectSingleNode("ns:AltitudeMeters", nsManager).ValueAsDouble; } if (trackpointNodes.Current.SelectSingleNode("ns:HeartRateBpm/ns:Value", nsManager) != null) { waypoint.HeartRate = trackpointNodes.Current.SelectSingleNode("ns:HeartRateBpm/ns:Value", nsManager).ValueAsDouble; } // do not add waypoint if it has the same location or time as the previous one if (waypoint.LongLat != null && !waypoint.LongLat.Equals(lastLongLat) && waypoint.Time != lastTime) { // special handling for positionless trackpoint in the beginning, use its time together with next position if (trackpointCount == 1 && lastLongLat == null && routeSegment.Waypoints.Count == 0) { waypoint.Time = lastTime; } routeSegment.Waypoints.Add(waypoint); } lastLongLat = waypoint.LongLat; lastTime = waypoint.Time; trackpointCount++; } if (lastLongLat == null && routeSegment.Waypoints.Count > 1) { // special handling for positionless trackpoint in the end, use its time together with previous position routeSegment.Waypoints[routeSegment.Waypoints.Count - 1].Time = lastTime; } trackCount++; } } // add last route segment if (routeSegment.Waypoints.Count > 1) { routeSegments.Add(routeSegment); } // set position of all start and end waypoints of the route segments if they are null foreach (RouteSegment rs in routeSegments) { if (rs.FirstWaypoint.LongLat == null && rs.Waypoints.Count > 1) { rs.Waypoints[1] = rs.Waypoints[1].Clone(); } if (rs.LastWaypoint.LongLat == null && rs.Waypoints.Count > 1) { rs.Waypoints[rs.Waypoints.Count - 1] = rs.Waypoints[rs.Waypoints.Count - 2].Clone(); } } // the laps lapNodes = activities.Current.Select("ns:Lap", nsManager); // first store all elapsed times List <double> elapsedTimes = new List <double>(); LapCollection laps = new LapCollection(); if (lapNodes.MoveNext()) { DateTime startTime = DateTime.Parse(lapNodes.Current.GetAttribute("StartTime", "")); double elapsedTime = 0; do { elapsedTimes.Add(elapsedTime); elapsedTime += lapNodes.Current.SelectSingleNode("ns:TotalTimeSeconds", nsManager).ValueAsDouble; } while (lapNodes.MoveNext()); laps = RouteImporterUtil.CreateLapsFromElapsedTimes(startTime, elapsedTimes, routeSegments); } importResult.Route = new Route(routeSegments); importResult.Laps = laps; importResult.Succeeded = importResult.Route.Segments.Count > 0; if (importResult.Route.Segments.Count == 0) { importResult.Error = ImportError.NoWaypoints; } break; } } reader.Close(); if (EndWork != null) { EndWork(this, new EventArgs()); } }