public static double Distance(Trackpoint tp1, Trackpoint tp2) { //=ACOS(SIN(lat1)*SIN(lat2)+COS(lat1)*COS(lat2)*COS(lon2-lon1))*6371 double dist = Math.Acos(Math.Sin(DegreeToRadian(tp1.LatitudeDegrees)) * Math.Sin(DegreeToRadian(tp2.LatitudeDegrees)) + Math.Cos(DegreeToRadian(tp1.LatitudeDegrees)) * Math.Cos(DegreeToRadian(tp2.LatitudeDegrees)) * Math.Cos(DegreeToRadian(tp2.LongitudeDegrees - tp1.LongitudeDegrees))) * 6371; return(dist); }
public static void SetPoint(Trackpoint tp1, Trackpoint tp2, double Distance) { double dist = 0; do { tp2.LongitudeDegrees += 0.000001; tp2.LatitudeDegrees += 0.000001; dist = Utils.Distance(tp1, tp2); } while (dist < Distance); }
static void OnMesg(object sender, MesgEventArgs e) { string activityType = e.mesg.Name; Console.WriteLine("OnMesg: Received Mesg with global ID#{0}, its name is {1}", e.mesg.Num, activityType); Trackpoint tp = new Trackpoint(); for (byte i = 0; i < e.mesg.GetNumFields(); i++) { foreach (var field in e.mesg.fields) { string fieldValue = field.GetValue().ToString(); string fieldName = field.GetName().ToString(); string recordType = e.mesg.fields[i].Num.ToString(); Console.WriteLine("\tField{0} Index{1} (\"{2}\" Field#{4}) Value: {3}", i, 0, fieldName, fieldValue, recordType); if (!activityTypes.Contains(activityType)) { activityTypes.Add(activityType); } if (activityType == "FileId") { switch (fieldName) { case "TimeCreated": Dynastream.Fit.DateTime dt = new Dynastream.Fit.DateTime(uint.Parse(fieldValue)); tcx.Id = Trackpoint.ConvertDate(dt.GetDateTime()); tcx.StartTime = dt.GetDateTime(); break; default: break; } } if (activityType == "Record") { switch (fieldName) { case "Timestamp": Dynastream.Fit.DateTime dt = new Dynastream.Fit.DateTime(uint.Parse(fieldValue)); tp.Time = dt.GetDateTime(); break; case "HeartRate": tp.HeartRateBpm = int.Parse(fieldValue); break; case "PositionLat": tp.LatitudeDegrees = double.Parse(fieldValue); break; case "PositionLong": tp.LongitudeDegrees = double.Parse(fieldValue); break; case "Altitude": tp.AltitudeMeters = 300; //double.Parse(fieldValue); break; default: break; } } } } if (activityType == "Record") { tcx.TrackpointList.Add(tp); } }
public void Save(String Filename) { XElement xTrack = new XElement("Track"); foreach (Trackpoint trackPoint in TrackpointList) { xTrack.Add(trackPoint.GetTrackpoint()); } XElement xTcx = new XElement("Activities", new XElement("Activity", new XAttribute("Sport", Sport), new XElement("Id", Id), new XElement("Lap", new XAttribute("StartTime", Trackpoint.ConvertDate(StartTime)), new XElement("DistanceMeters", DistanceMeters), new XElement("Calories", Calories), new XElement("TotalTimeSeconds", TotalTimeSeconds), xTrack))); xTcx.Save(Filename); }