WinRT Geolocator 总是返回相同的位置
Posted
技术标签:
【中文标题】WinRT Geolocator 总是返回相同的位置【英文标题】:WinRT Geolocator always return the same position 【发布时间】:2013-06-23 12:27:30 【问题描述】:我们的一个应用程序中的 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 放在类级别,结果相同。
有什么想法吗?
【问题讨论】:
将async void
更改为 async Task
并使用 await
关键字调用方法 ExecuteObtenirCoordGPSCommand()
。您是否在应用清单中添加了定位功能?
我们使用 MS 的示例代码具有相同的行为:code.msdn.microsoft.com/windowsapps/Geolocation-2483de66/view/…
您是否在应用清单中添加了定位功能?
【参考方案1】:
不确定这是否是您的问题,但您使用的 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 方法。
我希望这会有所帮助。 干杯,汉斯。
【讨论】:
以上是关于WinRT Geolocator 总是返回相同的位置的主要内容,如果未能解决你的问题,请参考以下文章
如果区域设置未在“英语(美国)”上设置,Geolocator.GetGeopositionAsync() 返回四舍五入的值
我如何在cpp-winrt idl文件和普通/标准cpp类中使用相同的名称空间名称?
HTTPClient 返回 HttpRequestException WinRT
在 C++/WinRT 项目中使用 CoreDispatcher::RunAsync 时获取“在定义之前无法使用返回‘auto’的函数”