在Windows Phone 8.1中实时跟踪位置

时间:2015-01-13 00:43:11

标签: c# geolocation maps windows-phone-8.1

很抱歉,如果这是一个愚蠢的问题,我是Windows Phone 8.1开发的初学者。 我正在使用 MapControl 在地图上显示我当前的位置,但是当我移动时,我的位置不会实时自动更新,除非我点击一个按钮并重新初始化之前的图钉位置创建。有没有更好的方法可以在没有用户每次想要看到他当前位置时按下按钮的情况下发生这种情况。

private async Task setMyLocation() 
        {
            try
            {
                var gl = new Geolocator() { DesiredAccuracy = PositionAccuracy.High };
                Geoposition location = await gl.GetGeopositionAsync(TimeSpan.FromMinutes(5), TimeSpan.FromSeconds(5));
                var pin = new MapIcon()
                {
                    Location = location.Coordinate.Point,
                    Title = "You are here",
                    NormalizedAnchorPoint = new Point() { X = 0, Y = 0 },
                };
                myMapView.MapElements.Add(pin);
                await myMapView.TrySetViewAsync(location.Coordinate.Point, 20);
            }
            catch
            {
                myMapView.Center = new Geopoint(App.centerPin);
                myMapView.ZoomLevel = 20;
                Debug.WriteLine("GPS NOT FOUND");
            }
            App.centerPin = myMapView.Center.Position;
        }

提前致谢!

2 个答案:

答案 0 :(得分:8)

不是运行计时器和轮询,而是处理Geolocator.PositionChanged事件。这将在每次更改位置时触发,并且效率会显着提高。

您可以设置Geolocator.MovementThreshold属性,使其仅在用户移动了给定距离时触发,如果用户站在同一位置则不执行任何操作。您选择的阈值可能取决于地图放大的距离。

答案 1 :(得分:0)

我这样做的方法是放置一个Timer,它以给定的间隔从服务器请求信息。

查看包含代码段的答案:Stackoverflow answer