在 Windows Phone 8.1 上获取给定 CivicAddress 的坐标/地理点

Posted

技术标签:

【中文标题】在 Windows Phone 8.1 上获取给定 CivicAddress 的坐标/地理点【英文标题】:Get Coordinates/Geopoint for given CivicAddress on Windows Phone 8.1 【发布时间】:2015-01-16 10:28:10 【问题描述】:

从我看过的任何地方,我发现了如何获取一组特定坐标的CivicAddress,就像这样(感谢@Romasz 的回答):

var geolocator = new Geolocator();
geolocator.DesiredAccuracyInMeters = 100;
Geoposition position = await geolocator.GetGeopositionAsync();

// reverse geocoding
BasicGeoposition myLocation = new BasicGeoposition 
     Longitude = position.Coordinate.Longitude,
     Latitude = position.Coordinate.Latitude
;

Geopoint pointToReverseGeocode = new Geopoint(myLocation);
MapLocationFinderResult result = await MapLocationFinder.FindLocationsAtAsync(pointToReverseGeocode);

string country = result.Locations[0].Address.Country;

但是,我有CivicAddress,但我需要知道它的坐标。我该怎么做?

【问题讨论】:

【参考方案1】:

MapLocationFinderResult 有一些有用的属性,您应该能够检索 GeoPoint 像这样:

Geopoint point = result.Locations.FirstOrDefault().Point;

这是您问题中的代码。但是,如果您想根据名称查找某些内容,则可以使用MapLocationFinder.FindLocationsAsync:

MapLocationFinderResult result = await MapLocationFinder.FindLocationsAsync("Hospital", myGeopoint, maxResults);
Geopoint point = result.Locations.FirstOrDefault().Point;

GeoPoint 在此方法中用作帮助器 - 区域内可能有许多“医院”,该方法应返回最近的。


编辑 - 更多信息:

如果您不想提供任何起始GeoPoint,则提供默认值:

MapLocationFinderResult result = await MapLocationFinder.FindLocationsAsync("Lizbona", new Geopoint(new BasicGeoposition()), 5);
var point = result.Locations.ToList();

请记住,结果取决于您在字符串中输入的内容,对于上面的示例,我得到两个结果 - 一个在葡萄牙,地理位置为 Lat = 38,72 Long = -9,15,第二个在波兰,地理位置为 Lat = 52,67 Long = 16,48(波兰城镇统计)。两者都存在并且都是正确的 - 这仅取决于您的输入。另一方面,如果我搜索"Lizbon" - 我只会得到一个结果,如果"Lisbon" - 四个结果。它可能还取决于用户的语言。

【讨论】:

但据我了解,您仍然需要geopoint 来进行搜索。我有一个地址,想知道该地址的坐标是什么,这与 Google Maps API 所做的差不多(参见示例 here)。我可以这样做吗? @ricochite 我在答案中添加了更多信息。您可以将任何地理点作为提示 - 这只是一个提示 - 但在某些情况下结果可能令人惊讶。 它确实有效,但是如果您正在寻找带有街道名称和编号的特定地址,有时它不会返回任何内容。不过,总比没有好。我会将您的回复标记为答案,因为它确实有效,但我想如果您需要更精确的数据(以及几乎每个地址的结果),GoogleMaps API 似乎可以很好地处理这项工作。 @ricochte 我认为这取决于几件事:用户正在使用什么地图(加载在phone0上,如果他允许在线搜索,地图何时更新等等。这些问题涉及我认为的每个 API。 @Romasz :有没有比这个 API 更好的替代方案。因为我已经尝试过使用它,对于像“巴士”、“巴士”、“巴士站”等普通查询,我没有得到任何结果。对于“医院”,我得到了一些结果,但它们不是最接近的。它们是随机挑选的。

以上是关于在 Windows Phone 8.1 上获取给定 CivicAddress 的坐标/地理点的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows Phone 8.1 XAML 中获取设备屏幕分辨率

Windows Phone 8.1 中的裁剪图像问题

如何在 Windows Phone 8.1 中获取当前位置的当前货币代码

c# Windows Phone 8.1 如何获取地理坐标对象

如何获取方法异步 c# windows phone 8.1 的值

如何获取 Windows Phone 8.1 的设备唯一 ID?