Ejemplo n.º 1
0
        /// <summary>
        /// Adds the range.
        /// </summary>
        /// <param name="sessionDisplayablePoints">The session displayable points.</param>
        //public void AddRange(List<ActivityPoint> points)
        //{
        //    if (points == null)
        //    {
        //        Debug.WriteLine("SessionMap points is null");
        //        //throw new ArgumentException();
        //        return;
        //    }

        //    foreach (var point in points)
        //    {
        //        Add(point);
        //    }
        //}

        private void RefreshColors()
        {
            Color  mapPointColor;
            double maxSpeed = (double)(SessionPoints.Max(s => s.Speed) * 3.6f);
            Func <ISessionDisplayablePoint, Color?> colorBaseValueSelector = SelectColorBySpeed(maxSpeed);

            foreach (var sessionpoint in SessionPoints)
            {
                mapPointColor =
                    colorBaseValueSelector(sessionpoint) ?? Color.Gray;

                sessionpoint.SetPointColor(mapPointColor);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Adds the specified session displayable point.
        /// </summary>
        /// <param name="sessionDisplayablePoint">The session displayable point.</param>
        public void Add(ActivityPoint point)
        {
            SessionDisplayablePoint previousPoint =
                SessionPoints.Count > 0
                ? SessionPoints.Last()
                : null;
            DateTime startTime = point.TimeStamp;
            SessionDisplayablePoint sessionDisplayablePoint;
            TimeSpan elapsedTime = point.TimeStamp - startTime;

            double?speed = point.Speed;

            if (speed == null &&
                previousPoint != null &&
                previousPoint.HasPosition &&
                previousPoint.Distance.HasValue &&
                point.Position != LatLong.Empty &&
                point.DistanceInMeters > 0 &&
                elapsedTime.TotalSeconds > 0)
            {
                double kilometersTraveled =
                    GeoCalculation.HaversineDistance(previousPoint.Position, point.Position);
                double hoursElapsed = (elapsedTime - previousPoint.Time).TotalHours;
                speed = kilometersTraveled / hoursElapsed;
            }

            sessionDisplayablePoint = new SessionDisplayablePoint(
                elapsedTime,
                point.DistanceInMeters,
                point.AltitudeInMeters,
                speed,
                point.Position);

            if (GeoCalculation.IsPointNewLeftBottom(BottomLeft, sessionDisplayablePoint.Position.ToPosition()) ||
                GeoCalculation.IsPointNewTopRight(TopRight, sessionDisplayablePoint.Position.ToPosition()))
            {
                BottomLeft = sessionDisplayablePoint.Position.ToPosition();
                TopRight   = sessionDisplayablePoint.Position.ToPosition();
                Region     = GeoCalculation.BoundsToMapSpan(BottomLeft, TopRight);
            }

            SessionPoints.Add(sessionDisplayablePoint);
            RefreshColors();
        }