Ejemplo n.º 1
0
        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);

                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),
                });
            }
            else
            {
                Map.Center = coord;
            }

            _line.Path.Add(coord);
            _previousPositionChangeTick = System.Environment.TickCount;
        }
Ejemplo n.º 2
0
        private void Watcher_PositionChanged(object sender, GeoPositionChangedEventArgs <GeoCoordinate> e)
        {
            var coord = new GeoCoordinate(e.Position.Location.Latitude, e.Position.Location.Longitude);

            TimeSpan time          = TimeSpan.FromTicks(System.Environment.TickCount - _previousPositionChangeTick);
            double   secondsFromTs = time.TotalSeconds;

            if (_line.Path.Count > 0)
            {
                var previousPoint = _line.Path.Last();
                var distance      = coord.GetDistanceTo(previousPoint);

                _kilometres += distance / 1000.0;
                double metersPerSecond    = (distance / (secondsFromTs * 1000));
                double kilometersPerHours = (metersPerSecond * 3.6);

                speedTextBlock.Text    = string.Format("{0:f2} Km/H", kilometersPerHours.ToString("0.0"));
                distanceTextBlock.Text = string.Format("{0:f2} km", _kilometres);

                PositionHandler handler = new PositionHandler();
                var             heading = handler.CalculateBearing(new Position(previousPoint), new Position(coord));
                Map.SetView(coord, Map.ZoomLevel, heading, MapAnimationKind.Parabolic);
            }

            else
            {
                Map.Center = coord;
            }

            _line.Path.Add(coord);
            _previousPositionChangeTick = System.Environment.TickCount;
        }
Ejemplo n.º 3
0
        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);

                PositionHandler handler = new PositionHandler();
                var             heading = handler.CalculateBearing(new Position(previousPoint), new Position(coord));
                Map.SetView(coord, Map.ZoomLevel, heading, MapAnimationKind.Parabolic);

                Map.CartographicMode = MapCartographicMode.Hybrid;
            }
            else
            {
                Map.Center = coord;
            }

            _line.Path.Add(coord);
            _previousPositionChangeTick = System.Environment.TickCount;

            //MessageBox.Show("Time : "+System.Environment.TickCount);
        }
Ejemplo n.º 4
0
        public static ILayer CreateRouteLayer(string strRoute, IStyle style = null)
        {
            var features      = new Features();
            var GPSlineString = (LineString)Geometry.GeomFromText(strRoute);

            //Lines between each waypoint
            var lineString = new LineString(GPSlineString.Vertices.Select(v => SphericalMercator.FromLonLat(v.Y, v.X)));

            features.Add(new Feature {
                Geometry = lineString
            });

            //End of route
            var FeatureEnd = new Feature {
                Geometry = lineString.EndPoint
            };

            FeatureEnd.Styles.Add(new SymbolStyle
            {
                SymbolScale   = 1.5f,
                MaxVisible    = 2.0f,
                MinVisible    = 0.0f,
                RotateWithMap = true,
                SymbolType    = SymbolType.Ellipse,
                Fill          = new Brush {
                    FillStyle = FillStyle.Cross, Color = Color.Red, Background = Color.Transparent
                },
                Outline = new Pen {
                    Color = Color.Red, Width = 1.5f
                }
            });
            features.Add(FeatureEnd);

            //Start of route
            var FeatureStart = new Feature {
                Geometry = lineString.StartPoint
            };

            FeatureStart.Styles.Add(new SymbolStyle
            {
                SymbolScale   = 1.5f,
                MaxVisible    = 2.0f,
                MinVisible    = 0.0f,
                RotateWithMap = true,
                SymbolType    = SymbolType.Ellipse,
                Fill          = new Brush {
                    FillStyle = FillStyle.Cross, Color = Color.Green, Background = Color.Transparent
                },
                Outline = new Pen {
                    Color = Color.Green, Width = 1.5f
                }
            });
            features.Add(FeatureStart);

            //Add arrow halfway between waypoints
            var bitmapId = GetBitmapIdForEmbeddedResource("hajk.Images.Arrow-up.svg");

            for (int i = 0; i < GPSlineString.NumPoints - 1; i++)
            {
                //End points for line
                Position p1 = new Position(GPSlineString.Vertices[i].X, GPSlineString.Vertices[i].Y);
                Position p2 = new Position(GPSlineString.Vertices[i + 1].X, GPSlineString.Vertices[i + 1].Y);

                //Center point on line for arrow
                Point p_center = Utils.Misc.CalculateCenter(lineString.Vertices[i].Y, lineString.Vertices[i].X, lineString.Vertices[i + 1].Y, lineString.Vertices[i + 1].X);

                //Bearing of arrow
                var p     = new PositionHandler();
                var angle = p.CalculateBearing(p1, p2);

                var FeatureArrow = new Feature {
                    Geometry = p_center
                };
                FeatureArrow.Styles.Add(new SymbolStyle
                {
                    BitmapId       = bitmapId,
                    SymbolScale    = 0.5f,
                    MaxVisible     = 2.0f,
                    MinVisible     = 0.0f,
                    RotateWithMap  = true,
                    SymbolRotation = angle,
                    SymbolOffset   = new Offset(0, 0),
                });
                features.Add(FeatureArrow);

                //Waypoins
                var FeatureWaypoint = new Feature {
                    Geometry = lineString.Vertices[i]
                };
                FeatureWaypoint.Styles.Add(new SymbolStyle
                {
                    SymbolScale    = 0.7f,
                    MaxVisible     = 2.0f,
                    MinVisible     = 0.0f,
                    RotateWithMap  = true,
                    SymbolRotation = 45,
                    SymbolType     = SymbolType.Ellipse,
                    Fill           = null, // new Brush { FillStyle = FillStyle.Cross, Color = Color.Red, Background = Color.Transparent},
                    Outline        = new Pen {
                        Color = Color.Blue, Width = 1.5f
                    }
                });
                features.Add(FeatureWaypoint);
            }

            return(new MemoryLayer
            {
                DataSource = new MemoryProvider(features),
                Name = "RouteLayer",
                Style = style
            });
        }