1

我们的一个应用程序中的 WinRT Geolocator 有一个奇怪的行为。用户单击应用程序中的按钮以获取当前位置。第一次工作正常,但所有后续单击按钮都会返回相同的坐标,即使我们移动超过一公里也是如此。

该应用程序在 ThinkPad 上运行,我们已经安装了一个名为“GPS Satellite”的应用程序,如果我们切换到这个应用程序,获取一个坐标,然后返回我们的应用程序,那么 Geolocator 会返回正确的坐标。所以我们知道 GPS 工作正常,但似乎坐标保存在缓存中,即使我们已经设置了几毫秒的过期时间。

private async void ExecuteObtenirCoordGPSCommand()
        {      
            try
            {
                Geolocator geolocator = new Geolocator();
                geolocator.DesiredAccuracy = PositionAccuracy.High;
                // Make the request for the current position

                Geoposition pos = await geolocator.GetGeopositionAsync(new TimeSpan(0,0,0,0,200), new TimeSpan(0,0,5));


                Place.Latitude = pos.Coordinate.Latitude;
                Place.Longitude = pos.Coordinate.Longitude;
            }
            catch
            {
                GPSMsgErreur = "The GPS is unavailable";
            }
}

我们尝试过让 GetGeopositionAsync 方法过期,但它并没有解决问题。

我们尝试将 Geolocator var 放在类级别,结果相同。

有任何想法吗?

4

1 回答 1

0

不确定这是否是您的问题,但您使用的 API 在此帖子中已过时:http: //msdn.microsoft.com/en-us/library/windows/apps/windows.devices.geolocation.geocoordinate

尝试使用:

Place.Latitude = pos.Coordinate.Point.Position.Latitude;
Place.Longitude = pos.Coordinate.Point.Position.Longitude;

您还可以使用:

double someVar = pos.Coordinate.Accuracy

找出设备上的误差范围。可能是你离你的第一个位置不够远,而你的第二个位置在误差范围内......

我还可以告诉您,我有一个使用 Visual Studio 2013 Windows (WinRT) 构建的软件,该软件使用您正在使用的相同对象在 ThinkPad 上运行,并且运行良好。我和你的主要区别在于我使用的是上面显示的 API,并且我没有使用以下语句:

geolocator.DesiredAccuracy = PositionAccuracy.High;

而且我没有将任何参数传递给 GetGeopositionAsync 方法。

我希望这有帮助。干杯,汉斯。

于 2014-06-03T17:24:39.607 回答