/// <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); } }
/// <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(); }