如何在Windows Phone 8上的“诺基亚地图”中获取地点名称

本文关键字:诺基亚地图 获取 地图 诺基亚 Windows Phone 上的 | 更新日期: 2023-09-27 18:21:27

我想在Windows Phone 8中使用Maps API从我的当前位置获取一个地方的名称(类似于Foursquare或Google Maps)。我已经可以使用本教程中的代码获取我的当前位置了。

有人能帮我吗?

如何在Windows Phone 8上的“诺基亚地图”中获取地点名称

您可以使用ReverseGeocodeQuery类。

var rgc = new ReverseGeocodeQuery();
rgc.QueryCompleted += rgc_QueryCompleted;
rgc.GeoCoordinate = myGeoCoord; //or create new gc with your current lat/lon info 
rgc.QueryAsync();

然后,您可以使用传入的事件参数的Result属性从rgc_QueryCompleted事件处理程序中获取数据。

如果@keyboardP的答案还不够,这里(希望)有一个工作示例来获取有关您的位置的信息。没有可以查找的"名称"属性,至少不能从API一侧查找。

public async Task<MapLocation> ReverseGeocodeAsync(GeoCoordinate location)
{
    var query = new ReverseGeocodeQuery { GeoCoordinate = location };
    if (!query.IsBusy)
    {
        var mapLocations = await query.ExecuteAsync();
        return mapLocations.FirstOrDefault();
    }
    return null;
}

为此,您需要添加以下异步查询的扩展方法(来自compiledexperience.com博客)

public static class GeoQueryExtensions
{
    public static Task<T> ExecuteAsync<T>(this Query<T> query)
    {
        var taskSource = new TaskCompletionSource<T>();
        EventHandler<QueryCompletedEventArgs<T>> handler = null;
        handler = (sender, args) =>
        {
            query.QueryCompleted -= handler;
            if (args.Cancelled)
                taskSource.SetCanceled();
            else if (args.Error != null)
                taskSource.SetException(args.Error);
            else
                taskSource.SetResult(args.Result);
        };
        query.QueryCompleted += handler;
        query.QueryAsync();
        return taskSource.Task;
    }
}