Выполнение геокодирования и обратного геокодирования

Примечание

MapControl и службы карт требуют ключ проверки подлинности Maps, который называется MapServiceToken. Дополнительные сведения о получении и установке ключа проверки подлинности карт см. в статье Запрос ключа проверки подлинности карт.

В этом руководстве показано, как преобразовать адреса улиц в географические расположения (геокодирование) и преобразовать географические расположения в адреса улиц (обратное геокодирование) путем вызова методов класса MapLocationFinder в пространстве имен Windows.Services.Maps .

Совет

Чтобы узнать больше об использовании карт в приложении, скачайте пример MapControl из репозитория универсальных примеров Windows на сайте GitHub.

Классы, участвующие в геокодирования и обратном геокодирования, организованы следующим образом.

Важно!

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

Получение сведений о местоположении (геокодирование)

В этом разделе показано, как преобразовать адрес улицы или название места в географическое расположение (геокодирование).

  1. Вызовите одну из перегрузок метода FindLocationsAsync класса MapLocationFinder с именем места или адресом улицы.
  2. Метод FindLocationsAsync возвращает объект MapLocationFinderResult .
  3. Используйте свойство Locationsобъекта MapLocationFinderResult для предоставления объектов MapLocation коллекции. Может быть несколько объектов MapLocation , так как система может найти несколько расположений, соответствующих заданным входным данным.
using Windows.Services.Maps;
using Windows.Devices.Geolocation;
...
private async void geocodeButton_Click(object sender, RoutedEventArgs e)
{
   // The address or business to geocode.
   string addressToGeocode = "Microsoft";

   // The nearby location to use as a query hint.
   BasicGeoposition queryHint = new BasicGeoposition();
   queryHint.Latitude = 47.643;
   queryHint.Longitude = -122.131;
   Geopoint hintPoint = new Geopoint(queryHint);

   // Geocode the specified address, using the specified reference point
   // as a query hint. Return no more than 3 results.
   MapLocationFinderResult result =
         await MapLocationFinder.FindLocationsAsync(
                           addressToGeocode,
                           hintPoint,
                           3);

   // If the query returns results, display the coordinates
   // of the first result.
   if (result.Status == MapLocationFinderStatus.Success)
   {
      tbOutputText.Text = "result = (" +
            result.Locations[0].Point.Position.Latitude.ToString() + "," +
            result.Locations[0].Point.Position.Longitude.ToString() + ")";
   }
}

Этот код отображает в текстовом поле tbOutputText указанные ниже результаты.

result = (47.6406099647284,-122.129339994863)

Получение адреса (обратное геокодирование)

В этом разделе показано, как преобразовать географическое расположение в адрес (обратное геокодирование).

  1. Вызовите метод FindLocationsAtAsync класса MapLocationFinder.
  2. Метод FindLocationsAtAsync возвращает объект MapLocationFinderResult, который содержит коллекцию подходящих объектов MapLocation.
  3. Используйте свойство Locationsобъекта MapLocationFinderResult для предоставления объектов MapLocation коллекции. Может быть несколько объектов MapLocation , так как система может найти несколько расположений, соответствующих заданным входным данным.
  4. Доступ к объектам MapAddress можно получить с помощью свойства Address каждого объекта MapLocation.
using Windows.Services.Maps;
using Windows.Devices.Geolocation;
...
private async void reverseGeocodeButton_Click(object sender, RoutedEventArgs e)
{
   // The location to reverse geocode.
   BasicGeoposition location = new BasicGeoposition();
   location.Latitude = 47.643;
   location.Longitude = -122.131;
   Geopoint pointToReverseGeocode = new Geopoint(location);

   // Reverse geocode the specified geographic location.
   MapLocationFinderResult result =
         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)
   {
      tbOutputText.Text = "town = " +
            result.Locations[0].Address.Town;
   }
}

Этот код отображает в текстовом поле tbOutputText указанные ниже результаты.

town = Redmond