Realizar geocodificación y geocodificación inversa

Nota:

MapControl y servicios de mapas requieren una clave de autenticación de mapas denominada MapServiceToken. Para obtener más información sobre cómo obtener y establecer una clave de autenticación de mapas, consulta Solicitar una clave de autenticación de mapas.

En esta guía se muestra cómo convertir direcciones de calle en ubicaciones geográficas (geocodificación) y convertir ubicaciones geográficas en direcciones de calle (geocodificación inversa) llamando a los métodos de la clase MapLocationFinder en el espacio de nombres Windows.Services.Maps .

Sugerencia

Para obtener más información sobre el uso de mapas en la aplicación, descargue el ejemplo MapControl del repositorio de ejemplos universales de Windows en GitHub.

Las clases implicadas en la geocodificación y la geocodificación inversa se organizan de la siguiente manera.

Importante

 Debe especificar una clave de autenticación de mapas para poder usar los servicios de mapa. Para obtener más información, consulta Solicitar una clave de autenticación de mapas.

Obtener una ubicación (geocodificación)

En esta sección se muestra cómo convertir una dirección postal o un nombre de lugar en una ubicación geográfica (geocodificación).

  1. Llame a una de las sobrecargas del método FindLocationsAsync de la clase MapLocationFinder con un nombre de lugar o una dirección postal.
  2. El método FindLocationsAsync devuelve un objeto MapLocationFinderResult .
  3. Utilice la propiedad Locations de MapLocationFinderResult para exponer una colección de objetos MapLocation . Puede haber varios objetos MapLocation porque el sistema puede encontrar varias ubicaciones que corresponden a la entrada especificada.
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() + ")";
   }
}

Este código muestra los siguientes resultados en el cuadro de texto tbOutputText.

result = (47.6406099647284,-122.129339994863)

Obtener una dirección (geocodificación inversa)

En esta sección se muestra cómo convertir una ubicación geográfica en una dirección (geocodificación inversa).

  1. Llama al método FindLocationsAtAsync de la clase MapLocationFinder.
  2. El método FindLocationsAtAsync devuelve un objeto MapLocationFinderResult que contiene una colección de objetos MapLocation coincidentes.
  3. Utilice la propiedad Locations de MapLocationFinderResult para exponer una colección de objetos MapLocation . Puede haber varios objetos MapLocation porque el sistema puede encontrar varias ubicaciones que corresponden a la entrada especificada.
  4. Acceda a los objetos MapAddress a través de la propiedad 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;
   }
}

Este código muestra los siguientes resultados en el cuadro de texto tbOutputText.

town = Redmond