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.
- La clase MapLocationFinder contiene métodos que controlan la geocodificación (FindLocationsAsync) y la geocodificación inversa (FindLocationsAtAsync).
- Estos métodos devuelven una instancia mapLocationFinderResult.
- La propiedad Locations del MapLocationFinderResult expone una colección de objetos MapLocation.
- Los objetos MapLocation tienen una propiedad Address, que expone un objeto MapAddress que representa una dirección postal y una propiedad Point, que expone un objeto Geopoint que representa una ubicación geográfica.
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).
- Llame a una de las sobrecargas del método FindLocationsAsync de la clase MapLocationFinder con un nombre de lugar o una dirección postal.
- El método FindLocationsAsync devuelve un objeto MapLocationFinderResult.
- 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).
- Llame al método FindLocationsAtAsync de la clase MapLocationFinder.
- El método FindLocationsAtAsync devuelve un objeto MapLocationFinderResult que contiene una colección de objetos MapLocation coincidentes.
- 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.
- 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