Ejemplo n.º 1
0
        private Track CreateTrack(Activity activity, List <ActivityStream> streams)
        {
            List <TrackPoint> trackPoints = new List <TrackPoint>();

            var latLngJArray = new Newtonsoft.Json.Linq.JArray(
                streams.First(stream => stream.StreamType == StreamType.LatLng).Data.ToArray()
                );

            var latLngList = latLngJArray.ToObject <List <float[]> >();


            //foreach(var item in latLngJArray)
            //    item.
            //var latLngList = latLngJArray.SelectMany(token => token.Values<float[]>()).ToArray();


            var distanceArray = streams.First(stream => stream.StreamType == StreamType.Distance).Data.Select(obj => (double)obj).ToArray();
            var altitudeArray = streams.First(stream => stream.StreamType == StreamType.Altitude).Data.Select(obj => (double)obj).ToArray();
            var timeArray     = streams.First(stream => stream.StreamType == StreamType.Time).Data.Select(obj => TimeSpan.FromSeconds(Convert.ToDouble(obj))).ToArray();


            for (int i = 0; i < latLngList.Count; i++)
            {
                var latitude  = latLngList[i][0];
                var longitude = latLngList[i][1];
                var distance  = distanceArray[i];
                var altitude  = altitudeArray[i];
                var time      = activity.DateTimeStart + timeArray[i];

                var trackpoint = new TrackPoint(latitude, longitude, altitude, distance, time);

                trackPoints.Add(trackpoint);
            }

            var climbs = new ClimbFinder().Find(trackPoints.ToArray());

            return(new Track(Guid.NewGuid(), trackPoints.ToArray(), climbs));
        }
Ejemplo n.º 2
0
        public static Track CreateTrack(gpx11.gpxType gpx)
        {
            var trackPoints = new List <TrackPoint>();

            var transformer = new GaussKreugerTranformation(Ellipsoid.WGS84);

            if (gpx.trk.Length > 0)
            {
                var trk = gpx.trk[0];

                double     distance       = 0.0;
                Coordinate lastCoordinate = null;

                foreach (var trkseg in trk.trkseg)
                {
                    foreach (var trkpt in trkseg.trkpt)
                    {
                        var coodinate = transformer.ToCoordinate((double)trkpt.lat, (double)trkpt.lon);

                        if (lastCoordinate != null)
                        {
                            distance += lastCoordinate.DistanceTo(coodinate);
                        }

                        lastCoordinate = coodinate;

                        var trackpoint = new TrackPoint((double)trkpt.lat, (double)trkpt.lon, (double)trkpt.ele, distance, trkpt.time);

                        trackPoints.Add(trackpoint);
                    }
                }
            }

            var climbs = new ClimbFinder().Find(trackPoints.ToArray());


            return(new Track(Guid.NewGuid(), trackPoints.ToArray(), climbs));
        }
Ejemplo n.º 3
0
        public static Track CreateTrack(tcx20.TrainingCenterDatabase_t database)
        {
            var trackPoints = new List <TrackPoint>();

            var track = new List <tcx20.Trackpoint_t>();

            if (database.Activities != null && database.Activities.Activity != null &&
                database.Activities.Activity.Length > 0)
            {
                var activity = database.Activities.Activity[0];

                foreach (var lap in activity.Lap)
                {
                    track.AddRange(lap.Track);
                }
            }
            else if (database.Courses != null && database.Courses.Length > 0 &&
                     database.Courses[0].Track != null && database.Courses[0].Track.Length > 0)
            {
                track.AddRange(database.Courses[0].Track);
            }


            if (track.Count <= 0)
            {
                return(null);
            }

            var index = 0;
            var firstAltitudeIndex = -1;
            var distance           = 0.0;
            var altitude           = -1.0;

            TrackPoint firstPoint = null;

            foreach (tcx20.Trackpoint_t point in track)
            {
                if (point.AltitudeMetersSpecified)
                {
                    if (firstAltitudeIndex == -1)
                    {
                        firstAltitudeIndex = index;
                    }

                    altitude = point.AltitudeMeters;
                }

                if (point.DistanceMetersSpecified)
                {
                    distance = point.DistanceMeters;
                }

                if (point.Position != null)
                {
                    var trackpoint = new TrackPoint(point.Position.LatitudeDegrees, point.Position.LongitudeDegrees,
                                                    altitude, distance, point.Time);

                    if (firstPoint == null)
                    {
                        firstPoint = trackpoint;
                    }

                    trackPoints.Add(trackpoint);

                    index++;
                }
            }

            for (var i = firstAltitudeIndex; i >= 0; i--)
            {
                trackPoints[i].Altitude = trackPoints[firstAltitudeIndex].Altitude;
            }

            var climbs = new ClimbFinder().Find(trackPoints.ToArray());

            return(new Track(Guid.NewGuid(), trackPoints.ToArray(), climbs));
        }