Получение точного адреса с использованием номера здания и почтового индекса - UWP - MapService - PullRequest
0 голосов
/ 19 февраля 2020

, поэтому я пытаюсь получить полный адрес, используя класс MapLocationFinder в MapService для UWP.

Я использую функцию FindLocationsAsync и передаю следующее:

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

Где номер здания 20, а почтовый индекс SW11 1BP. По какой-то причине это не возвращает название улицы ... Переменная Address не содержит ничего, кроме того, что находится в Лондоне. Что я делаю неправильно? Я думал, что смогу найти полный адрес по почтовому индексу и номеру улицы.

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Строка, которую вы ищете "20, SW11 1BP", не является четко определенной строкой запроса. Если вам нужно точное совпадение адресов, вам нужно указать номер дома и улицу, служба не может работать только с номером дома и почтовым индексом. Результат, который вы получаете, является наилучшим совпадением с учетом неоднозначной строки - он находит только почтовый индекс. Возвращенный лат / лонг будет центром почтового индекса, который может быть или не быть рядом с улицей, поэтому обратный геокод на этом лат / лонг может не возвращать правильную улицу и определенно не будет соответствовать этому номеру здания.

0 голосов
/ 19 февраля 2020

Пожалуйста, проверьте документ Выполните геокодирование и обратное геокодирование . Мы должны указать карты ключ аутентификации , прежде чем вы сможете использовать картографические сервисы. Для использования картографического сервиса нам также необходимо включить возможность определения местоположения .

И вы можете проверить свойство 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;
    }
}
...