/// <summary> /// Poisition changed event handler, executes code when position changes and updates map. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void Geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args) { Dispatcher.BeginInvoke(() => { // Update global GeoCoordinate. App.GeoCoordinate = _loc.ConvertGeocoordinate(args.Position.Coordinate); // If position source if from satellite, update track line. if (args.Position.Coordinate.PositionSource == PositionSource.Satellite) { App.MapFunctions.DrawTrackLine(App.GeoCoordinate, App.ShowTrackLine); } // Update global track object. TODO: make this a function. App.Trk.MaxAltitude = _miscFunctions.MaxDouble(App.GeoCoordinate.Altitude, App.Trk.MaxAltitude); App.Trk.MaxSpeed = _miscFunctions.MaxDouble(App.GeoCoordinate.Speed, App.Trk.MaxSpeed); App.Trk.SpeedCount++; App.Trk.TotalSpeed += App.GeoCoordinate.Speed; App.Trk.AVGSpeed = _miscFunctions.AverageDouble(App.Trk.TotalSpeed, App.Trk.SpeedCount); // Animate the map with the latest location. App.MapFunctions.CenterMapOnLocationAnimated(App.GeoCoordinate, App.Zoom, App.MyMap.Pitch, App.NorthUp, App.RunningInBackground); App.MapFunctions.ShowLocationArrow(App.GeoCoordinate); // Update text boxes on main page. txtSpeed.Text = _unitConversions.Speed(_mapUnitIndex, App.GeoCoordinate.Speed).ToString(); txtDistance.Text = _unitConversions.DistanceLarge(_mapUnitIndex, App.Trk.TotalMeters).ToString(); txtAltitude.Text = _unitConversions.DistanceSmall(_mapUnitIndex, (double)args.Position.Coordinate.Altitude).ToString(); if (App.Pin != null) { App.Pin.Content = string.Format("{0}, Distance to: {1}{2}", App.PinName, _unitConversions.DistanceLarge(_mapUnitIndex, App.GeoCoordinate.GetDistanceTo(App.Pin.GeoCoordinate)), _unitConversions.LargeMapUnits(_mapUnitIndex)); } // Update live tile. ShellTile.ActiveTiles.First().Update(new IconicTileData() { WideContent1 = App.ShowTrackLine ? string.Format("Distance: {0} {1}", _unitConversions.DistanceLarge(_mapUnitIndex, App.Trk.TotalMeters).ToString(), _unitConversions.LargeMapUnits(_mapUnitIndex)) : string.Format("Odometer: {0} {1}", _unitConversions.DistanceLarge(_mapUnitIndex, App.Odometer).ToString(), _unitConversions.LargeMapUnits(_mapUnitIndex)), WideContent2 = string.Format("Speed: {0} {1}", _unitConversions.Speed(_mapUnitIndex, App.GeoCoordinate.Speed), _unitConversions.SpeedMapUnits(_mapUnitIndex)), WideContent3 = App.Timer.TotalTime() }); }); }
/// <summary> /// Loads all the text boxes on the page. /// </summary> /// <param name="trk"></param> private Track LoadPage(Track trk) { UnitConversions uc = new UnitConversions(); int mapUnitIndex = App.UserSettings.GetSetting(AppResources.UserSettingsMapUnits, 0); if (trk != null) { txtTitle.Text = trk.name; txtAVGSpeed.Text = uc.Speed(mapUnitIndex, trk.AVGSpeed).ToString("00.0"); txtDistance.Text = uc.DistanceLarge(mapUnitIndex, trk.TotalMeters).ToString(); txtTotalTime.Text = trk.TotalTime; txtMAXAltitude.Text = uc.DistanceSmall(mapUnitIndex, trk.MaxAltitude).ToString(); txtAVGSpdUnit.Text = uc.SpeedMapUnits(mapUnitIndex); txtDistanceUnit.Text = uc.LargeMapUnits(mapUnitIndex); txtMAXAltUnit.Text = uc.SmallMapUnits(mapUnitIndex); LoadTrackInMap(trk.line.Path); return trk; } return null; }