Compartilhar via


Executar geocódigo e geocódigo reverso

Observação

MapControl e os serviços de mapa exigem uma chave de autenticação de mapas chamada MapServiceToken. Para saber mais sobre como obter e definir uma chave de autenticação de mapas, consulte Solicitar uma chave de autenticação de mapas.

Este guia mostra como converter endereços de rua em localizações geográficas (geocodificação) e converter localizações geográficas em endereços de rua (geocodificação inversa) chamando os métodos da classe MapLocationFinder no namespace Windows.Services.Maps .

Dica

Para saber mais sobre como usar mapas em seu aplicativo, baixe o exemplo MapControl do repositório de exemplos universais do Windows no GitHub.

As classes envolvidas em geocodificação e geocódigo reverso são organizadas da seguinte maneira.

Importante

 Você deve especificar uma chave de autenticação de mapas para poder usar os serviços de mapa. Para obter mais informações, consulte Solicitar uma chave de autenticação de mapas.

Obter uma localização (geocódigo)

Esta seção mostra como converter um endereço de rua ou um nome de local em uma localização geográfica (geocodificação).

  1. Chame uma das sobrecargas do método FindLocationsAsync da classe MapLocationFinder com um nome de local ou endereço de rua.
  2. O método FindLocationsAsync retorna um objeto MapLocationFinderResult .
  3. Use a propriedade Locations do MapLocationFinderResult para expor uma coleção de objetos MapLocation . Pode haver vários objetos MapLocation porque o sistema pode encontrar vários locais que correspondem à entrada fornecida.
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() + ")";
   }
}

Esse código exibe os seguintes resultados na caixa de texto tbOutputText .

result = (47.6406099647284,-122.129339994863)

Obter um endereço (geocódigo reverso)

Esta seção mostra como converter uma localização geográfica em um endereço (geocodificação inversa).

  1. Chame o método FindLocationsAtAsync da classe MapLocationFinder.
  2. O método FindLocationsAtAsync retorna um objeto MapLocationFinderResult que contém uma coleção de objetos MapLocation correspondentes.
  3. Use a propriedade Locations do MapLocationFinderResult para expor uma coleção de objetos MapLocation . Pode haver vários objetos MapLocation porque o sistema pode encontrar vários locais que correspondem à entrada fornecida.
  4. Acesse objetos MapAddress por meio da propriedade Address de cada 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;
   }
}

Esse código exibe os seguintes resultados na caixa de texto tbOutputText .

town = Redmond