stravaactivityファイルを無理やりgpxファイルに変換するプログラム

Iphoneアプリがバグってファイルが同期されなくなったのでIphoneから抽出したStravaactivityファイルからgpxに変換するプログラムを無理やり作りました。

メチャクチャなプログラムなので暇な時にきれいに整形したいと思います。


``` converttogpx.cs
using System;
using System.Collections.Generic;
using System.IO;

namespace ConvertStravaactivity2Gpx
{
    class Program
    {
        static void Main()
        {
            process();
        }
        private static void process()
        {
            try
            {

                double startTime = new double();
                List<loopPram> gpxInfoList = new List<loopPram>();
                // csvファイルを開く
                using (var sr = new StreamReader(@"C:\XXXX\XXXXXXXXX.stravactivity"))
                {
                    // ストリームの末尾まで繰り返す
                    while (!sr.EndOfStream)
                    {
                        // ファイルから一行読み込む
                        var line = sr.ReadLine();
                        if (line.StartsWith("strt"))
                        {
                            var splitval = line.Split(':');
                            double.TryParse(splitval[2], out startTime);
                        }
                        else if (line.StartsWith("wp: "))
                        {
                            var excepttrashchar = line.Replace("wp:", "").Replace(" ", "").Split(';');
                            double parmlat = new double();
                            double parmlong = new double();
                            double parmalt = new double();
                            double paramt = new double();
                            foreach (var itemlist in excepttrashchar)
                            {
                                var val = itemlist.Split(':')[1];
                                if (!string.IsNullOrEmpty(val)) { 
                                if (itemlist.StartsWith("lat:"))
                                {
                                    parmlat = double.Parse(val);
                                }
                                else if (itemlist.StartsWith("long:"))
                                {
                                    parmlong = double.Parse(val);
                                }
                                else if (itemlist.StartsWith("alt:"))
                                {
                                    parmalt = double.Parse(val);
                                }
                                else if (itemlist.StartsWith("t:"))
                                {
                                    paramt = double.Parse(val);
                                }
                                }
                            }
                            gpxInfoList.Add(new loopPram()
                            {
                                ele = EleInFormat(parmalt),
                                lat = LatLongInFormat(parmlat),
                                lon = LatLongInFormat(parmlong),
                                time = DateInFormat(TimeInFormat(paramt))
                            });
                        }
                    }
                }

                //ファイル書き込み
                using (StreamWriter sw = File.CreateText(@"C:\XXXXX\\GenericGpxScript.gpx"))
                {
                    sw.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
                    sw.WriteLine("<gpx creator=\"GenericScript\" version=\"1.1\" xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">");
                    sw.WriteLine("<metadata>");
                    sw.Write("<time>");
                    //starttime
                    sw.Write(DateInFormat(TimeInFormat(startTime)));
                    //
                    sw.WriteLine("</time>");
                    sw.WriteLine("</metadata>");
                    sw.WriteLine("<trk>");
                    sw.WriteLine("<name> Generated GPX </name>");
                    sw.WriteLine("<trkseg>");

                    //Loop Process
                    for (int i = 0; i < gpxInfoList.Count; i++)
                    {
                        sw.Write("<trkpt lat=\"");
                        sw.Write(gpxInfoList[i].lat);
                        sw.Write("\" lon=\"");
                        sw.Write(gpxInfoList[i].lon);
                        sw.WriteLine("\"> ");
                        sw.Write("<ele>");
                        sw.Write(gpxInfoList[i].ele);
                        sw.WriteLine("</ele>");
                        sw.Write("<time>");
                        sw.Write(gpxInfoList[i].time);
                        sw.WriteLine("</time>");
                        sw.WriteLine("</trkpt>");
                    }
                    sw.WriteLine("</trkseg>");
                    sw.WriteLine("</trk>");
                    sw.WriteLine("</gpx >");
    
                    sw.Close();
                }
            }
            catch (Exception e)
                {
                Console.WriteLine(e.ToString());
            }

        }
        private static string DateInFormat(double timestamp)
        {
            var dt = DateTimeOffset.FromUnixTimeSeconds((long)timestamp).UtcDateTime;
            return dt.ToString("yyyy-MM-ddTHH:mm:ssZ");
        }
        private static double LatLongInFormat(double reference)
        {
            return Math.Round(reference, 6, MidpointRounding.AwayFromZero);
        }
        private static double EleInFormat(double reference)
        {
            return Math.Round(reference, 1, MidpointRounding.AwayFromZero);
        }
        private static double TimeInFormat(double reference)
        {
            return Math.Floor(reference);
        }

    }
    class loopPram
    {
        public double lat { get; set; }
        public double lon { get; set; }
        public double ele { get; set; }
        public string time { get; set; }
    }
}

```