使用楼号和邮政编码取回确切地址 - UWP - MapService

Getting back the exact address using building number and postcode - UWP - MapService

所以我正在尝试使用 MapService for UWP 中的 MapLocationFinder class 检索完整地址。

我正在使用函数 FindLocationsAsync 并传入以下内容:

MapLocationFinderResult result = await
                    MapLocationFinder.FindLocationsAsync(BuildingNumber + ", " + PostCode, null);

其中楼号为 20,邮政编码为 SW11 1BP。出于某种原因,这并没有返回街道名称……Address 变量不包含除伦敦以外的任何内容。我究竟做错了什么?我以为我可以通过邮政编码和街道号码进行完整的地址查找。

请检查文档 Perform geocoding and reverse geocoding . We must specify a maps authentication key before you can use map services. For using map service we also need to enable the location capability

并且您可以检查MapLocationFinderResult Status 属性以确保查询成功。

MapService.ServiceToken = "Token";
MapLocationFinderResult result =
      await MapLocationFinder.FindLocationsAsync(
                       BuildingNumber  + ", " + PostCode, null);

if (result.Status == MapLocationFinderStatus.Success)
{
    var Text = "result = (" +
       result.Locations[0].Point.Position.Latitude.ToString() + "," +
    result.Locations[0].Point.Position.Longitude.ToString() + result.Locations[0].DisplayName + ")";
}

如果上述地址不包含街道名称,您可以使用上面的纬度经度进行反向地理编码,然后调用FindLocationsAtAsync方法获取地址。

MapLocationFinderResult result =
          await MapLocationFinder.FindLocationsAsync(
                           BuildingNumber  + ", " + PostCode, null);
if (result.Status == MapLocationFinderStatus.Success)
{
    var temp = "result = (" +
       result.Locations[0].Point.Position.Latitude.ToString() + "," +
    result.Locations[0].Point.Position.Longitude.ToString() + result.Locations[0].DisplayName + result.Locations[0].Address.Street + ")";

    BasicGeoposition location = new BasicGeoposition();
    location.Latitude = result.Locations[0].Point.Position.Latitude;
    location.Longitude = result.Locations[0].Point.Position.Longitude;
    Geopoint pointToReverseGeocode = new Geopoint(location);

    // Reverse geocode the specified geographic location.
    MapLocationFinderResult MyResult =
          await MapLocationFinder.FindLocationsAtAsync(pointToReverseGeocode);

    // If the query returns results, display the name of the town
    // contained in the address of the first result.
    if (result.Status == MapLocationFinderStatus.Success)
    {
        var text = "Street = " +
              MyResult.Locations[0].Address.Street;
    }
}

您搜索的字符串“20, SW11 1BP”不是定义明确的查询字符串。如果您想要精确匹配的地址,则需要提供门牌号和街道,该服务无法仅使用门牌号和 post 代码。您得到的结果是给定模糊字符串的最佳匹配 - 它只找到 post 代码。 lat/long returned 将是 post 代码的中心,可能靠近也可能不靠近街道,因此 lat/long 上的反向地理编码可能不会 return 正确的街道,绝对不会准确到那个楼号。