private void Watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) { var coord = new GeoCoordinate(e.Position.Location.Latitude, e.Position.Location.Longitude); if (_line.Path.Count > 0) { var previousPoint = _line.Path.Last(); var distance = coord.GetDistanceTo(previousPoint); var millisPerKilometer = (1000.0 / distance) * (System.Environment.TickCount - _previousPositionChangeTick); _kilometres += distance / 1000.0; paceLabel.Text = TimeSpan.FromMilliseconds(millisPerKilometer).ToString(@"mm\:ss"); distanceLabel.Text = string.Format("{0:f2} km", _kilometres); caloriesLabel.Text = string.Format("{0:f0}", _kilometres * 65); // an average of 65 calories burned per kilometer PositionHandler handler = new PositionHandler(); var heading = handler.CalculateBearing(new Position(previousPoint), new Position(coord)); Map.SetView(coord, Map.ZoomLevel, heading, MapAnimationKind.Parabolic); ShellTile.ActiveTiles.First().Update(new IconicTileData() { Title = "WP8Runner", WideContent1 = string.Format("{0:f2} km", _kilometres), WideContent2 = string.Format("{0:f0} calories", _kilometres * 65), // an average of 65 calories burned per kilometer }); } else { Map.Center = coord; } _line.Path.Add(coord); _previousPositionChangeTick = System.Environment.TickCount; }
public void SetUp() { handler = new PositionHandler(); }