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() 返回四舍五入的值

Flutter Geolocator给出错误的纬度和经度

我如何在cpp-winrt idl文件和普通/标准cpp类中使用相同的名称空间名称?

HTTPClient 返回 HttpRequestException WinRT

在 C++/WinRT 项目中使用 CoreDispatcher::RunAsync 时获取“在定义之前无法使用返回‘auto’的函数”

检测用户是从 winrt windows phone 8.1 应用程序中的位置设置返回的