Beispiel #1
0
        public void formatTcxGpx(string fileName)
        {
            string ext = Path.GetExtension(fileName);

            if (ext == null)
            {
                string msg = "Format TCX/GPX: Cannot handle files with no extension";
                raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.ERR, msg));
                return;
            }
            if (ext.ToLower().Equals(".tcx"))
            {
                TrainingCenterDatabase tcx = TrainingCenterDatabase.Load(fileName);
                string saveFilename        = getSaveName(fileName, ".formatted");
                if (saveFilename != null)
                {
                    tcx.Save(saveFilename);
                }
            }
            else if (ext.ToLower().Equals(".gpx"))
            {
                gpx    gpx          = gpx.Load(fileName);
                string saveFilename = getSaveName(fileName, ".formatted");
                if (saveFilename != null)
                {
                    gpx.Save(saveFilename);
                }
            }
            else
            {
                string msg = "Format TCX/GPX: Not a supported extension: " + ext;
                raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.ERR, msg));
                return;
            }
        }
Beispiel #2
0
        public static void formatSingleTcxGpx(string fileName)
        {
            string ext = Path.GetExtension(fileName);

            if (ext == null)
            {
                Utils.errMsg("formatSingleTcxGpx: Cannot handle files with no extension");
                return;
            }
            if (ext.ToLower().Equals(".tcx"))
            {
                TrainingCenterDatabase tcx = TrainingCenterDatabase.Load(fileName);
                string saveFilename        = getSaveName(fileName, ".formatted");
                if (saveFilename != null)
                {
                    tcx.Save(saveFilename);
                }
            }
            else if (ext.ToLower().Equals(".gpx"))
            {
                gpx    gpx          = gpx.Load(fileName);
                string saveFilename = getSaveName(fileName, ".formatted");
                if (saveFilename != null)
                {
                    gpx.Save(saveFilename);
                }
            }
            else
            {
                Utils.errMsg("Not a supported extension: " + ext);
                return;
            }
        }
Beispiel #3
0
        public static void interpolateTcxFromGpx(string tcxFile, string gpxFile,
                                                 MainForm mainForm, GpsData.InterpolateMode mode)
        {
            try {
                TcxResult res =
                    GpsData.interpolateTcxFromGpx(tcxFile, gpxFile, mode);
                if (res.TCX == null)
                {
                    Utils.errMsg("Interpolate Tcx From Gpx failed:" + NL
                                 + "for " + Path.GetFileName(tcxFile) + NL
                                 + " and " + Path.GetFileName(gpxFile) + NL
                                 + res.Message);
                    return;
                }
                TrainingCenterDatabase tcxInterp = res.TCX;

                string saveFileName = getSaveName(tcxFile, ".interpolated");
                if (saveFileName != null)
                {
                    tcxInterp.Save(saveFileName);
                    mainForm.gpxTxcCallback(NL + "Recalculated " + tcxFile + NL
                                            + "  from " + gpxFile + NL
                                            + "  Output is " + saveFileName
                                            + NL + "  " + res.Message);
                }
                else
                {
                    return;
                }
            } catch (Exception ex) {
                Utils.excMsg("Error interpolating TCX from GPX", ex);
                return;
            }
        }
Beispiel #4
0
        /// <summary>
        /// <para>Processes inputFiles into Google Maps</para>
        /// </summary>
        /// <param name="inputFiles">List of inputFiles to process</param>
        /// <param name="googleMapsMatch">Export parameters to process</param>
        public static void ToGoogleMaps(List <FileInfo> inputFiles, Match googleMapsMatch)
        {
            System.Console.WriteLine("Starting GarminToGoogleMaps Process ...");

            var exportDirectoryPath = googleMapsMatch.Groups["googleMapsExportDirectory"].Value;
            var exportDirectory     = new DirectoryInfo(exportDirectoryPath);

            if (!exportDirectory.Exists)
            {
                Console.WriteLine("Failed to Export to Google Maps: Unable to find Directory \"" + exportDirectoryPath + "\"");
                Console.WriteLine();
                GarminTo.Program.ShowUsageMessage();
            }
            else
            {
                Console.WriteLine("Exporting to Google Maps ... ");

                var fileIndex = 0;
                foreach (var inputFile in inputFiles)
                {
                    fileIndex++;
                    Console.WriteLine("Processing " + fileIndex + " of " + inputFiles.Count + " file(s)");

                    /* read in training centre database from file provide as arg 0 */
                    var trainingCenterDatabase = TrainingCenterDatabase.ReadFromFile(inputFile.FullName);

                    var activityIndex = 0;
                    foreach (var activity in trainingCenterDatabase.Activities)
                    {
                        activityIndex++;
                        Console.WriteLine("   Processing " + activityIndex + " of " + trainingCenterDatabase.Activities.Count + " activities");

                        /* create map points (google) for creation of google maps */
                        var mapPoints = activity.ToMapPoints();

                        /* create google map file */
                        if (mapPoints.Count == 0)
                        {
                            Console.WriteLine("             " + activityIndex + " contains no GPS data, no Google map created.");
                        }
                        else
                        {
                            var outputFilePath = exportDirectory.FullName + "\\" + activity.Id.Replace(":", "-") + ".htm";
                            var outputFile     = new MapFile(outputFilePath);
                            outputFile.GenerateMap(mapPoints);
                        }
                    }
                }

                Console.WriteLine("Completed Exporting to Google Maps.");
            }

            Console.WriteLine();
        }
Beispiel #5
0
        public static void convertTcxToGpx(string fileName)
        {
            TrainingCenterDatabase tcx = TrainingCenterDatabase.Load(fileName);
            gpx gpx = GpsData.convertTcxToGpx(tcx);

            if (gpx != null)
            {
                fileName = Path.ChangeExtension(fileName, ".gpx");
                string saveFilename = getSaveName(fileName, ".converted");
                if (saveFilename != null)
                {
                    gpx.Save(saveFilename);
                }
            }
        }
Beispiel #6
0
        public static void convertGpxToTcx(string fileName)
        {
            gpx gpx = gpx.Load(fileName);
            TrainingCenterDatabase tcx = GpsData.convertGpxToTcx(gpx);

            if (tcx != null)
            {
                fileName = Path.ChangeExtension(fileName, ".tcx");
                string saveFilename = getSaveName(fileName, ".converted");
                if (saveFilename != null)
                {
                    tcx.Save(saveFilename);
                }
            }
        }
Beispiel #7
0
        private static Lap ConfigureLap(TrainingCenterDatabase db, List <Trackpoint> lapPoints, bool isLast)
        {
            var Track = new Track
            {
                Trackpoint = lapPoints
            };
            var DistanceMeters      = isLast ? (decimal.Parse(lapPoints[lapPoints.Count - 1].DistanceMeters, System.Globalization.NumberStyles.AllowDecimalPoint) % 1000).ToString() : "1000";
            var StartTime           = lapPoints[0].Time;
            var MaximumSpeed        = lapPoints.Max(x => decimal.Parse(x.Extensions.TPX.Speed, System.Globalization.NumberStyles.AllowDecimalPoint)).ToString();
            var MaximumHeartRateBpm = new MaximumHeartRateBpm
            {
                Value = lapPoints.Max(x => decimal.Parse(x.HeartRateBpm.Value, System.Globalization.NumberStyles.AllowDecimalPoint)).ToString()
            };
            var AverageHeartRateBpm = new AverageHeartRateBpm
            {
                Value = lapPoints.Average(x => decimal.Parse(x.HeartRateBpm.Value, System.Globalization.NumberStyles.AllowDecimalPoint)).ToString()
            };
            var TriggerMethod = "Manual";
            var Intensity     = db.Activities.Activity.Lap[0].Intensity;
            var Calories      = db.Activities.Activity.Lap.Average(x => decimal.Parse(x.Calories, System.Globalization.NumberStyles.AllowDecimalPoint)).ToString();
            var Extensions    = new Extensions
            {
                LX = new LX
                {
                    AvgRunCadence = lapPoints.Average(x => decimal.Parse(x.Extensions.TPX.RunCadence, System.Globalization.NumberStyles.AllowDecimalPoint)).ToString(),
                    AvgSpeed      = lapPoints.Average(x => decimal.Parse(x.Extensions.TPX.Speed, System.Globalization.NumberStyles.AllowDecimalPoint)).ToString(),
                    MaxRunCadence = lapPoints.Max(x => decimal.Parse(x.Extensions.TPX.RunCadence, System.Globalization.NumberStyles.AllowDecimalPoint)).ToString()
                }
            };
            var TotalTimeSeconds = (DateTime.Parse(lapPoints[lapPoints.Count - 1].Time) -
                                    DateTime.Parse(lapPoints[0].Time)).TotalSeconds.ToString();

            return(new Lap
            {
                Track = Track,
                DistanceMeters = DistanceMeters,
                StartTime = StartTime,
                MaximumSpeed = MaximumSpeed,
                MaximumHeartRateBpm = MaximumHeartRateBpm,
                AverageHeartRateBpm = AverageHeartRateBpm,
                TriggerMethod = TriggerMethod,
                Intensity = Intensity,
                Calories = Calories,
                Extensions = Extensions,
                TotalTimeSeconds = TotalTimeSeconds
            });
        }
Beispiel #8
0
 public static void recalculateTcx(string fileName, MainForm mainForm)
 {
     try {
         TrainingCenterDatabase tcx = GpsData.recalculateTcx(fileName);
         string saveFileName        = getSaveName(fileName, ".recalculated");
         if (saveFileName != null)
         {
             tcx.Save(saveFileName);
             mainForm.gpxTxcCallback(NL + "Recalculated " + fileName + NL
                                     + "  Output is " + saveFileName);
         }
         else
         {
             return;
         }
     } catch (Exception ex) {
         Utils.excMsg("Error recalculating TCX", ex);
         return;
     }
 }
Beispiel #9
0
 public void recalculateTcx(string fileName)
 {
     try {
         TrainingCenterDatabase tcx = GpsData.recalculateTcx(fileName);
         string saveFileName        = getSaveName(fileName, ".recalculated");
         if (saveFileName != null)
         {
             tcx.Save(saveFileName);
             string msg = "Recalculate TCX: Recalculated " + fileName + NL
                          + "  Output is " + saveFileName;
             raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.MSG, NL + msg));
         }
         else
         {
             return;
         }
     } catch (Exception ex) {
         string msg = "Error recalculating TCX";
         raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.EXC, msg, ex));
         return;
     }
 }
Beispiel #10
0
 public GpxFileModel(GpxModel parent, string fileName)
 {
     Parent   = parent;
     FileName = fileName;
     if (Path.GetExtension(fileName).ToLower().Equals(".tcx"))
     {
         IsTcx = true;
         TrainingCenterDatabase tcx = TrainingCenterDatabase.Load(fileName);
         if (tcx != null)
         {
             Gpx = GpsData.convertTcxToGpx(tcx);
         }
         else
         {
             Utils.errMsg("Failed to convert to GPX: " + NL + fileName);
         }
     }
     else
     {
         Gpx = gpx.Load(fileName);
     }
     reset();
 }
Beispiel #11
0
        public void interpolateTcxFromGpx(string tcxFile, string gpxFile,
                                          GpsData.InterpolateMode mode)
        {
            try {
                TcxResult res =
                    GpsData.interpolateTcxFromGpx(tcxFile, gpxFile, mode);
                if (res.TCX == null)
                {
                    string msg = "Interpolate Tcx From Gpx failed:" + NL
                                 + "for " + Path.GetFileName(tcxFile) + NL
                                 + " and " + Path.GetFileName(gpxFile) + NL
                                 + res.Message;
                    raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.ERR, msg));
                    return;
                }
                TrainingCenterDatabase tcxInterp = res.TCX;

                string saveFileName = getSaveName(tcxFile, ".interpolated");
                if (saveFileName != null)
                {
                    tcxInterp.Save(saveFileName);
                    string msg = "Interpolate TCX from GPX: Recalculated "
                                 + tcxFile + NL + "  from " + gpxFile + NL
                                 + "  Output is " + saveFileName
                                 + NL + "  " + res.Message;
                    raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.MSG, NL + msg));
                }
                else
                {
                    return;
                }
            } catch (Exception ex) {
                string msg = "Error interpolating TCX from GPX";
                raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.EXC, msg, ex));
                return;
            }
        }
Beispiel #12
0
        void Export()
        {
            string selectedFile = FileService.SaveFileDialog();

            if (!string.IsNullOrEmpty(selectedFile))
            {
                OutputFilePath = selectedFile;
            }

            if (!string.IsNullOrEmpty(OutputFilePath))
            {
                DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite");
                using (SQLiteConnection cnn = (SQLiteConnection)fact.CreateConnection())
                {
                    cnn.ConnectionString = "Data Source=" + FilePath;
                    cnn.Open();

                    SQLiteCommand command = new SQLiteCommand(
                        "SELECT PK_IntervalId, StartTime, TotalElapsedTime, TotalDistance, AverageStrokeRate, AverageHeartRate, AverageSpeed, TotalStrokeCount FROM Intervals" +
                        " WHERE FK_SessionId = @sessionId", cnn);
                    SQLiteParameter sessionParam = new SQLiteParameter("sessionId", System.Data.DbType.Int32);
                    sessionParam.Value = SelectedSession.Id;
                    command.Parameters.Add(sessionParam);

                    SQLiteCommand dataRecordCommand = new SQLiteCommand(
                        "SELECT dr.PK_DataRecordId, dr.ElapsedTime, dr.Latitude, dr.Longitude, dr.SpeedGps, dr.SpeedImpeller, dr.DistanceGps, dr.DistanceImpeller, dr.StrokeRate, dr.HeartRate," +
                        " osd.Power, osd.CatchAngle, osd.FinishAngle, osd.PositionOfMaxForce, osd.AverageHandleForce, osd.MaxHandleForce, osd.Slip, osd.Wash, osd.RealWorkPerStroke" +
                        " FROM DataRecords dr LEFT OUTER JOIN OarlockStrokeData osd ON osd.PK_OarlockStrokeRecordId = (SELECT PK_OarlockStrokeRecordId FROM OarlockStrokeData WHERE FK_DataRecordId = dr.PK_DataRecordId LIMIT 1)" +
                        " WHERE dr.FK_IntervalId = @intervalId AND dr.Type = 0", cnn); // Type filtered to 0 to just pick up strokes

                    SQLiteParameter intervalParam = new SQLiteParameter("intervalId", System.Data.DbType.Int32);
                    dataRecordCommand.Parameters.Add(intervalParam);

                    SQLiteDataReader reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        int      id               = (int)(long)reader[0];
                        DateTime startTime        = NKDateTimeConverter.NKToClr((long)reader[1]);
                        int      totalElapsedTime = (int)(long)reader[2];
                        int      totalDistance    = (int)(long)reader[3];
                        double   strokeRate       = Convert.ToDouble((long)reader[4]) / 2;
                        int      averageHeartRate = reader.IsDBNull(5) ? 0 : (int)(long)reader[5];
                        double   speed            = Convert.ToDouble((long)reader[6]) / 100;
                        int      totalStrokeCount = (int)(long)reader[7];

                        Interval interval = new Interval(id, startTime, totalElapsedTime, totalDistance, strokeRate, averageHeartRate, speed, totalStrokeCount);

                        intervalParam.Value = interval.Id;

                        SQLiteDataReader dataRecordReader = dataRecordCommand.ExecuteReader();

                        while (dataRecordReader.Read())
                        {
                            DataRecord record = new DataRecord();
                            record.ElapsedTime      = (int)(long)dataRecordReader[1];
                            record.Latitude         = (double)dataRecordReader[2];
                            record.Longitude        = (double)dataRecordReader[3];
                            record.SpeedGps         = Convert.ToDouble((long)dataRecordReader[4]) / 100;
                            record.SpeedImpeller    = Convert.ToDouble((long)dataRecordReader[5]) / 100;
                            record.DistanceGps      = (int)(long)dataRecordReader[6];
                            record.DistanceImpeller = (int)(long)dataRecordReader[7];
                            record.StrokeRate       = Convert.ToDouble((long)dataRecordReader[8]) / 2;
                            record.HeartRate        = (int)(long)dataRecordReader[9];
                            record.Power            = dataRecordReader.IsDBNull(10) ? 0 : Convert.ToDouble((long)dataRecordReader[10]) / 10;
                            record.CatchAngle       = dataRecordReader.IsDBNull(11) ? 0 : (int)(long)dataRecordReader[11];
                            record.FinishAngle      = dataRecordReader.IsDBNull(12) ? 0 : (int)(long)dataRecordReader[12];
                            record.MaxForceAngle    = dataRecordReader.IsDBNull(13) ? 0 : (int)(long)dataRecordReader[13];
                            record.AvgHandleForce   = dataRecordReader.IsDBNull(14) ? 0 : Convert.ToDouble((long)dataRecordReader[14]) / 10;
                            record.MaxHandleForce   = dataRecordReader.IsDBNull(15) ? 0 : Convert.ToDouble((long)dataRecordReader[15]) / 10;
                            record.SlipAngle        = dataRecordReader.IsDBNull(16) ? 0 : (int)(long)dataRecordReader[16];
                            record.WashAngle        = dataRecordReader.IsDBNull(17) ? 0 : (int)(long)dataRecordReader[17];
                            record.WorkPerStroke    = dataRecordReader.IsDBNull(18) ? 0 : Convert.ToDouble((long)dataRecordReader[18]) / 10;

                            interval.DataRecords.Add(record);
                        }

                        SelectedSession.Intervals.Add(interval);
                    }

                    reader.Close();
                }

                Activity activity = new Activity()
                {
                    Id = SelectedSession.StartTime, Sport = Sport.Other
                };
                activity.Creator = new Device()
                {
                    Name = "SpeedCoach GPS"
                };

                foreach (Interval interval in SelectedSession.Intervals)
                {
                    ActivityLap lap = interval.ToLap();

                    // TODO: Cadence/Stroke Rate (type conversion)
                    double maxSpeed     = 0;
                    byte   maxHeartRate = 0;

                    foreach (DataRecord record in interval.DataRecords)
                    {
                        Trackpoint trackpoint = record.ToTrackpoint(lap.StartTime);

                        if (trackpoint.HeartRateBpm.Value > maxHeartRate)
                        {
                            maxHeartRate = trackpoint.HeartRateBpm.Value;
                        }

                        switch (SelectedSession.SpeedInput)
                        {
                        case SpeedInput.Gps:
                            if (record.SpeedGps > maxSpeed)
                            {
                                maxSpeed = record.SpeedGps;
                            }
                            break;

                        case SpeedInput.Impeller:
                            if (record.SpeedImpeller > maxSpeed)
                            {
                                maxSpeed = record.SpeedImpeller;
                            }
                            break;
                        }
                        lap.Track.Add(trackpoint);
                    }

                    lap.MaximumSpeed        = maxSpeed;
                    lap.MaximumHeartRateBpm = new HeartRateInBeatsPerMinute()
                    {
                        Value = maxHeartRate
                    };

                    activity.Lap.Add(lap);
                }

                TrainingCenterDatabase tcd = new TrainingCenterDatabase();
                tcd.Activities.Activity.Add(activity);

                using (XmlWriter writer = XmlWriter.Create(OutputFilePath))
                {
                    (new XmlSerializer(typeof(TrainingCenterDatabase))).Serialize(writer, tcd);
                }
            }
        }
Beispiel #13
0
        public IActionResult OnPost()
        {
            if (TcxFile == null || Distance == null)
            {
                return(new BadRequestResult());
            }

            var stream = TcxFile.OpenReadStream();

            var xmlString = RemoveUnsupportedTypes(stream);

            TrainingCenterDatabase db = null;

            db = Deserialize(xmlString);


            var trackpoints = new List <Trackpoint>();

            foreach (var lap in db.Activities.Activity.Lap)
            {
                trackpoints.AddRange(lap.Track.Trackpoint);
            }

            var baseDistance = decimal.Parse(trackpoints[trackpoints.Count - 1].DistanceMeters, System.Globalization.NumberStyles.AllowDecimalPoint);
            var coef         = Distance.Value / baseDistance;

            foreach (var point in trackpoints)
            {
                point.DistanceMeters       = (decimal.Parse(point.DistanceMeters, System.Globalization.NumberStyles.AllowDecimalPoint) * coef).ToString();
                point.Extensions.TPX.Speed = (decimal.Parse(point.Extensions.TPX.Speed, System.Globalization.NumberStyles.AllowDecimalPoint) * coef).ToString();
            }

            var newLaps       = new List <Lap>();
            int thousandIndex = 1;

            do
            {
                var lapPoints = trackpoints.TakeWhile(x => decimal.Parse(x.DistanceMeters, System.Globalization.NumberStyles.AllowDecimalPoint) < thousandIndex * 1000).ToList();
                var lap       = ConfigureLap(db, lapPoints, false);
                newLaps.Add(lap);
                thousandIndex++;

                trackpoints = trackpoints.Skip(lapPoints.Count).ToList();
            }while (thousandIndex <= (int)(Distance.Value / 1000));

            var lastPoints = trackpoints;
            var lastLap    = ConfigureLap(db, lastPoints, true);

            newLaps.Add(lastLap);

            db.Activities.Activity.Lap = newLaps;

            db.Xsi = null;


            XmlSerializer serializer   = new XmlSerializer(typeof(TrainingCenterDatabase));
            var           resultStream = new MemoryStream();

            serializer.Serialize(resultStream, db);
            resultStream.Position = 0;
            var resultXmlString = ReturnUnsupportedTypes(resultStream);

            byte[] bytes     = Encoding.Default.GetBytes(resultXmlString);
            string file_type = "application/octet-stream";
            string file_name = TcxFile.FileName.Insert(TcxFile.FileName.IndexOf(".tcx"), "_converted");

            return(File(bytes, file_type, file_name));
        }
Beispiel #14
0
        public TrainingCenterDatabase BuildFile()
        {
            var activityDate     = ActivityDate;
            var activityDuration = ActivityDuration;
            var calories         = Calories;
            var maxHR            = MaxHR;
            var averageHR        = AverageHR;

            var duration          = TimeSpan.ParseExact(activityDuration, @"mm\:ss", CultureInfo.CurrentCulture, TimeSpanStyles.AssumeNegative);
            var date              = DateTime.ParseExact(activityDate, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
            var minHR             = (2 * averageHR) - maxHR;
            var durationInSeconds = duration.TotalSeconds * -1;

            TrainingCenterDatabase trainingCenterDatabase = new TrainingCenterDatabase();
            ActivityList_t         activityList           = new ActivityList_t();
            Activity_t             activity = new Activity_t();

            activity.Sport = Sport_t.Other;
            activity.Id    = date;
            ActivityLap_t lap = new ActivityLap_t();

            HeartRateInBeatsPerMinute_t averageHeartRate = new HeartRateInBeatsPerMinute_t();

            averageHeartRate.Value  = (byte)averageHR;
            lap.AverageHeartRateBpm = averageHeartRate;

            HeartRateInBeatsPerMinute_t maxHeartRate = new HeartRateInBeatsPerMinute_t();

            maxHeartRate.Value      = (byte)maxHR;
            lap.MaximumHeartRateBpm = maxHeartRate;

            lap.Calories = (ushort)calories;

            lap.TotalTimeSeconds = durationInSeconds;

            lap.Intensity = Intensity_t.Active;

            lap.TriggerMethod = TriggerMethod_t.Manual;

            Track_t track       = new Track_t();
            var     trackPoints = new List <Trackpoint_t>();

            Trackpoint_t trackPoint1 = new Trackpoint_t();

            trackPoint1.Time = date;
            HeartRateInBeatsPerMinute_t heartRate1 = new HeartRateInBeatsPerMinute_t();

            heartRate1.Value         = (byte)minHR;
            trackPoint1.HeartRateBpm = heartRate1;
            trackPoints.Add(trackPoint1);

            Trackpoint_t trackPoint2 = new Trackpoint_t();

            trackPoint2.Time = date.AddSeconds(durationInSeconds / 4);
            HeartRateInBeatsPerMinute_t heartRate2 = new HeartRateInBeatsPerMinute_t();

            heartRate2.Value         = (byte)averageHR;
            trackPoint2.HeartRateBpm = heartRate2;
            trackPoints.Add(trackPoint2);

            Trackpoint_t trackPoint3 = new Trackpoint_t();

            trackPoint3.Time = date.AddSeconds(2 * (durationInSeconds / 4));
            HeartRateInBeatsPerMinute_t heartRate3 = new HeartRateInBeatsPerMinute_t();

            heartRate3.Value         = (byte)averageHR;
            trackPoint3.HeartRateBpm = heartRate3;
            trackPoints.Add(trackPoint3);

            Trackpoint_t trackPoint4 = new Trackpoint_t();

            trackPoint4.Time = date.AddSeconds(3 * (durationInSeconds / 4));
            HeartRateInBeatsPerMinute_t heartRate4 = new HeartRateInBeatsPerMinute_t();

            heartRate4.Value         = (byte)averageHR;
            trackPoint4.HeartRateBpm = heartRate4;
            trackPoints.Add(trackPoint4);

            Trackpoint_t trackPoint5 = new Trackpoint_t();

            trackPoint5.Time = date.AddSeconds(durationInSeconds);
            HeartRateInBeatsPerMinute_t heartRate5 = new HeartRateInBeatsPerMinute_t();

            heartRate5.Value         = (byte)maxHR;
            trackPoint5.HeartRateBpm = heartRate5;
            trackPoints.Add(trackPoint5);


            track.Trackpoint = trackPoints;
            var tracks = new List <Track_t>();

            tracks.Add(track);
            lap.Track = tracks;

            var laps = new List <ActivityLap_t>();

            laps.Add(lap);
            activity.Lap = laps;
            var activities = new List <Activity_t>();

            activities.Add(activity);
            activityList.Activity             = activities;
            trainingCenterDatabase.Activities = activityList;

            return(trainingCenterDatabase);
        }
Beispiel #15
0
        /// <summary>
        /// <para>Process inputFiles into Excel 2013</para>
        /// </summary>
        /// <param name="inputFiles">List of inputFiles to process</param>
        /// <param name="excel2013Match">Export parameters to process</param>
        public static void ToExcel2013(List <FileInfo> inputFiles, Match excel2013Match)
        {
            System.Console.WriteLine("Starting GarminToExcel2013 Process ...");

            /* validate export values */
            var exportDirectoryPath = excel2013Match.Groups["excel2013ExportDirectory"].Value;
            var exportDirectory     = new DirectoryInfo(exportDirectoryPath);

            if (!exportDirectory.Exists)
            {
                Console.WriteLine("Failed to Export to Excel 2013: Unable to find Directory \"" + exportDirectoryPath + "\"");
                Console.WriteLine();
                GarminTo.Program.ShowUsageMessage();
            }
            else
            {
                Console.WriteLine("Exporting to Excel 2013 ... ");

                var fileIndex = 0;
                foreach (var inputFile in inputFiles)
                {
                    fileIndex++;
                    Console.WriteLine("Processing " + fileIndex + " of " + inputFiles.Count + " file(s)");

                    /* read in training centre database from file provide as arg 0 */
                    var trainingCenterDatabase = TrainingCenterDatabase.ReadFromFile(inputFile.FullName);

                    var rowIndex      = 0;
                    var activityIndex = 0;
                    foreach (var activity in trainingCenterDatabase.Activities)
                    {
                        activityIndex++;
                        Console.WriteLine("   Processing " + activity + " of " + trainingCenterDatabase.Activities.Count + " activities");
                        var excelWorkbokFilePath = exportDirectory.FullName + "\\" + activity.Id.Replace(":", "-") + ".xlsx";
                        // start Excel and get Application object.
                        var excelApplication = new Microsoft.Office.Interop.Excel.Application {
                            Visible = false, UserControl = false
                        };
                        Microsoft.Office.Interop.Excel.Workbook excelWorkbook = excelApplication.Workbooks.Add();

                        try
                        {
                            /* get the relevant Workbook Sheet */
                            Microsoft.Office.Interop.Excel.Worksheet excelSheet = excelWorkbook.Worksheets.Add();

                            /* create data to be written to excel
                             *      http://www.clear-lines.com/blog/post/Write-data-to-an-Excel-worksheet-with-C-fast.aspx */
                            var data = new string[activity.RowCount + 1, 8];
                            data[rowIndex, 0] = "ID";
                            data[rowIndex, 1] = "Sport";
                            data[rowIndex, 2] = "Time";
                            data[rowIndex, 3] = "LatitudeDegrees";
                            data[rowIndex, 4] = "LongitudeDegrees";
                            data[rowIndex, 5] = "AltitudeMeters";
                            data[rowIndex, 6] = "DistanceMeters";
                            data[rowIndex, 7] = "HeartRateBpm";
                            rowIndex++;

                            /* for each lap read all the trackpoints from that lap and create a data row */
                            System.Console.Write("   Processing " + activity.RowCount + " trackpoints: ");
                            foreach (var lap in activity.Laps)
                            {
                                foreach (var trackpoint in lap.Track)
                                {
                                    data[rowIndex, 0] = rowIndex.ToString();
                                    data[rowIndex, 1] = activity.Sport;
                                    data[rowIndex, 2] = trackpoint.Time != null?trackpoint.Time.ToString() : "";

                                    data[rowIndex, 3] = trackpoint.Position != null?trackpoint.Position.LatitudeDegrees.ToString() : "";

                                    data[rowIndex, 4] = trackpoint.Position != null?trackpoint.Position.LongitudeDegrees.ToString() : "";

                                    data[rowIndex, 5] = trackpoint.AltitudeMeters != null?trackpoint.AltitudeMeters.ToString() : "";

                                    data[rowIndex, 6] = trackpoint.AltitudeMeters != null?trackpoint.AltitudeMeters.ToString() : "";

                                    data[rowIndex, 7] = trackpoint.HeartRateBpm != null?trackpoint.HeartRateBpm.Value.ToString() : "";

                                    rowIndex++;
                                    if (rowIndex % 500 == 0)
                                    {
                                        System.Console.Write(rowIndex + "..");
                                    }
                                }
                            }

                            /* write the data set as a range to the workbook */
                            var startCell  = (Microsoft.Office.Interop.Excel.Range)excelSheet.Cells[1, 1];
                            var endCell    = (Microsoft.Office.Interop.Excel.Range)excelSheet.Cells[rowIndex, 8];
                            var writeRange = excelSheet.Range[startCell, endCell];
                            writeRange.Value2 = data;

                            /* save the excel work book */
                            excelWorkbook.SaveAs(excelWorkbokFilePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                            System.Console.WriteLine();
                        }
                        catch (Exception exception)
                        {
                            throw exception;
                        }
                        finally
                        {
                            excelWorkbook.Close();
                            excelApplication.Quit();
                        }
                    }
                }

                Console.WriteLine("Completed Exporting to Excel 2013.");
            }

            Console.WriteLine();
        }