Поделиться через


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

Внимание

Bing Maps для выхода на пенсию службы Enterprise

Службы MapControl UWP и карты из пространства имен Windows.Services.Maps используют карты Bing. Карты Bing для предприятия устарели и будут прекращены, в то время как mapControl и службы больше не будут получать данные.

Дополнительные сведения см. в документации по Центру разработчиков карт Bing и картам Bing.

Примечание.

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

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

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

Внимание

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

Получение расположения (геокод)

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

  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