我想使用 Windows Phone 8 中的 Maps API 从我当前的位置获取一个地点的名称(类似于 Foursquare 或 Google Maps)。我已经可以使用这里的代码获取我的当前位置教程中的代码获取我的当前位置。
有谁能够帮我?
我想使用 Windows Phone 8 中的 Maps API 从我当前的位置获取一个地点的名称(类似于 Foursquare 或 Google Maps)。我已经可以使用这里的代码获取我的当前位置教程中的代码获取我的当前位置。
有谁能够帮我?
您可以使用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;
}
}