Executar geocodificação e geocodificação reversa
Importante
Desativação do serviço Bing Mapas para Empresas
O UWP MapControl e os serviços de mapas do namespace Windows.Services.Maps dependem do Bing Mapas. O Bing Mapas para Empresas está obsoleto e será descontinuado. Nesse momento, o MapControl e os serviços não receberão mais dados.
Para obter mais informações, consulte a Central de Desenvolvedores do Bing Mapas e a documentação do Bing Mapas.
Observação
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 em localizações geográficas (geocodificação) e converter localizações geográficas em endereços (geocodificação reversa) chamando os métodos da classe MapLocationFinder no namespace Windows.Services.Maps.
As classes envolvidas na geocodificação e geocodificação reversa são organizadas da seguinte forma.
- A classe MapLocationFinder contém métodos que lidam com geocodificação (FindLocationsAsync) e geocodificação reversa (FindLocationsAtAsync).
- Esses métodos retornam uma instância MapLocationFinderResult.
- A propriedade Locations do MapLocationFinderResult expõe uma coleção de objetos MapLocation.
- Os objetos MapLocation têm uma propriedade Address, que expõe um objeto MapAddress que representa um endereço de rua, e uma propriedade Point, que expõe um objeto Geopoint que representa uma localização geográfica.
Importante
Você deve especificar uma chave de autenticação de mapas antes de poder utilizar os serviços de mapa. Para obter mais informações, consulte Solicitar uma chave de autenticação de mapas.
Obter um local (Geocódigo)
Esta seção mostra como converter um endereço ou um nome de lugar em uma localização geográfica (geocodificação).
- Chame uma das sobrecargas do método FindLocationsAsync da classe MapLocationFinder com um nome de lugar ou endereço.
- O método FindLocationsAsync retorna um objeto MapLocationFinderResult.
- 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 tbOutputText
caixa de texto.
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 reversa).
- Chame o método FindLocationsAtAsync da classe MapLocationFinder.
- O método FindLocationsAtAsync retorna um objeto MapLocationFinderResult que contém uma coleção de objetos MapLocation correspondentes.
- 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.
- 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 tbOutputText
caixa de texto.
town = Redmond