示例#1
0
        /// <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()
                });
            });    
        }
示例#2
0
        /// <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;
        }