如何在UWP中更快地进行地理位置检索过程?

时间:2018-02-01 11:50:27

标签: c# performance uwp geolocation location

我正在使用Geolocator类在UWP app中查找设备的当前位置。位置检索过程在我的计算中运行得非常快。但是当我尝试在真实设备中运行相同的应用程序时,设备检索过程大约需要30秒。 我使用以下代码段:

var accessStatus = await Geolocator.RequestAccessAsync();
if (accessStatus == GeolocationAccessStatus.Allowed)
{
    Geolocator geolocator = new Geolocator
    {
        DesiredAccuracyInMeters = 500,
        DesiredAccuracy = PositionAccuracy.High
    };

    Geoposition pos = await geolocator.GetGeopositionAsync()
}

如何在我的设备中更快地完成此过程?

已经尝试过将DesiredAccuracyInMeters值提高到2000,但无法找到任何改进。提前谢谢。

2 个答案:

答案 0 :(得分:0)

如果您查看documentation,则可以看到当您同时设置DesiredAccuracyDesiredAccuracyInMeters时,最后一组优先:

  

如果未设置DesiredAccuracyInMeters或DesiredAccuracy,您的应用程序将使用500米的精度设置(对应于默认的DesiredAccuracy设置)。将DesiredAccuracy设置为Default或High会将DesiredAccuracyInMeters分别设置为500或10米。当您的应用设置DesiredAccuracy和DesiredAccuracyInMeters时,您的应用将使用最后设置的精确度值。

所以,因为您将DesiredAccuracy设置为High,所以您实际上会覆盖米设置。为了加快搜索速度,请不要设置High精度并仅设置米值。

答案 1 :(得分:0)

我将添加到Martin的问题中,您应首先使用缓存位置,然后使用GetPositionAsync,您应该以这种方式更快地本地化用户:

var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 500;

//Check if we have a cached position
var loc = await locator.GetLastKnownLocationAsync ();
if ( loc != null )
{
    CurrentPosition = new Position (loc.Latitude, loc.Longitude);
}

if ( !locator.IsGeolocationAvailable || !locator.IsGeolocationEnabled )
{
    return;
}

//and if not we get a new one
var def = await locator.GetPositionAsync (TimeSpan.FromSeconds (10), null, true);
CurrentPosition = new Position (def.Latitude, def.Longitude);