Compartir a través de


Realizar geocodificación y geocodificación inversa

Importante

Retirada del servicio Mapas de Bing for Enterprise

Los servicios MapControl y de mapa del espacio de nombres Windows.Services.Maps se basan en Mapas de Bing. Mapas de Bing for Enterprise está en desuso y se retirará, momento en el que los servicios y MapControl ya no recibirán datos.

Para obtener más información, consulte la documentación del Centro para desarrolladores de Mapas de Bing y Mapas de Bing.

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 postales a ubicaciones geográficas (geocodificación) y convertir ubicaciones geográficas en direcciones postales (geocodificación inversa) llamando a los métodos de la clase MapLocationFinder en el espacio de nombres Windows.Services.Maps.

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 tbOutputText texto.

result = (47.6406099647284,-122.129339994863)

Obtener una dirección (código geográfico inverso)

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

  1. Llame 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 tbOutputText texto.

town = Redmond