Introdução

Uma das principais funcionalidades dos smartphones e que os torna bastante úteis em determinadas situações cotidianas é a possibilidade de visualizar mapas com facilidade (dependendo de alguns fatores, claro). Muitas vezes estamos em algum local e queremos localizar um certo destino, para isso utilizamos os recursos de pesquisa por mapa disponibilizados por alguns sites e aplicativos.

Sabendo da existência desses recursos, podemos desejar integrá-los a nossas aplicações para dispositivos móveis, oferecendo ao usuário maiores facilidades na localização de locais a partir do próprio sistema.

Nesse artigo será apresentado o recurso de integração de aplicações para Windows Phone 7 com o Bing Maps, fazendo consultas por descrição do local, coordenadas geográficas e traçando rotas entre dois pontos.

Aqui será utilizado o Visual Studio 2010 com a atualização para a versão 7.1 do SDK do Silverligh para Windows Phone.

Busca por nome do local

O primeiro exemplo desenvolvido aqui demonstrará como realizar uma busca pelo nome do local, permitindo ao usuário digitar essa informação e exibindo o mapa em seguida. Para implementá-lo, inicie uma nova aplicação para Windows Phone e, na página principal (MainPage.xaml), adicione um TextBlock, um TextBlox e um Button dentro do Grid ContentPanel, conforme o código a seguir.

Listagem 1: Código XAML para a busca por nome


    
        
        
        

Em seguida, dê um duplo-clique sobre o botão btnBuscar e, no método btnBuscar_Click que trata o evento Click deste botão, adicione o seguinte código.

Listagem 2: Código C# para a busca por nome

private void btnBuscar_Click(object sender, RoutedEventArgs e)
{
    BingMapsTask mapa = new BingMapsTask();
    mapa.SearchTerm = txtLocal.Text;
    mapa.Show();
}

O ponto principal desse código é a classe BingMapsTask, que realiza a integração da aplicação com o serviço do Bing Maps. No código acima definimos a propriedade SearchTerm, que representa o texto a ser localizado. Depois é preciso executar o método Show, para que o mapa seja exibido na tela.

A aplicação em execução é mostrada na figura a seguir.

Primeiro exemplo em execução

Figura 1: Primeiro exemplo em execução

Clicando no botão Buscar, o resultado é apresentado em seguida.

Resultado da busca por nome

Figura 2: Resultado da busca por nome

Busca por coordenadas

Para a busca por coordenadas, precisaremos modificar a interface, permitindo que o usuário insira os valores da latitude e longitude do ponto que deseja localizar. Para isso, substitua o código do Grid ContentPanel pelo código a seguir, ou inicie uma nova aplicação ou página, como preferir.

Listagem 3: Código XAML para a busca por coordenadas


    
        
                
        
        
        

Agora será necessário adicionar uma referência a uma DLL que contém os recursos de navegação por coordenadas geográficas. Para isso, clique com a direita sobre a pasta References, no Solution Explorer, e em seguida sobre a opção “Add Reference...”. Na aba .NET localize a biblioteca “System.Device” e dê dois cliques sobre ela, criando a referência.

Feito isso, novamente acesse o método btnBuscar_Click, dando dois cliques sobre o botão btnBuscar, e adicione o código da Listagem 4, onde utilizamos novamente a classe BingMapsTask.

Listagem 4: Código C# para a busca por coordenadas

private void btnBuscar_Click(object sender, RoutedEventArgs e)
{
    BingMapsTask mapa = new BingMapsTask();
    mapa.Center = new GeoCoordinate(Convert.ToDouble(txtLatitude.Text), Convert.ToDouble(txtLongitude.Text));
    mapa.Show();
}

Para que a classe GeoCoordinate seja reconhecida, é preciso adicionar a referência ao namespace System.Device.Location na cláusula using.

Dessa vez estamos definindo o local onde o mapa deve ser centralizado, ou seja, o ponto que se está buscando a partir das coordenadas. Observe que os valores da latitude e longitude são do tipo Double, sendo preciso converter o texto dos textboxes antes de passá-lo como parâmetro.

A seguir temos a imagem da aplicação em execução.

Segundo exemplo em execução

Figura 3: Segundo exemplo em execução

Digitando os valores solicitados e clicando no botão Buscar, temos o resultado, conforme vemos na Figura 4.

Resultado da busca por coordenadas

Figura 4: Resultado da busca por coordenadas

Para facilitar a visualização, poderíamos definir o nível de zoom do resultado, alterando a propriedade ZoomLeval do BingMapsTask, como vemos a seguir.

Listagem 5: Alterando o nível de zoom

private void btnBuscar_Click(object sender, RoutedEventArgs e)
{
    BingMapsTask mapa = new BingMapsTask();
    mapa.Center = new GeoCoordinate(Convert.ToDouble(txtLatitude.Text), Convert.ToDouble(txtLongitude.Text));
    mapa.ZoomLevel = 30;
    mapa.Show();
}

Traçando uma rota

O próximo e último exemplo que veremos nesse artigo é sobre como traçar uma rota entre dois pontos e mostrá-la no mapa. Nesse caso, por questão de praticidade, iremos ver apenas o código que, adicionado ao evento Click de um botão, traça a rota entre dois pontos predefinidos.

Listagem 6: Trançando rota entre dois pontos

private void btnBuscar_Click(object sender, RoutedEventArgs e)
{
    BingMapsDirectionsTask rota = new BingMapsDirectionsTask();
    rota.Start = new LabeledMapLocation("Natal", new GeoCoordinate(-5.8, -35.2));
    rota.End = new LabeledMapLocation("Parnamirim", new GeoCoordinate(-5.9159, -35.2));
    rota.Show();
}

Nesse caso foi preciso utilizar outra classe pertencente ao namespace “Microsoft.Phone.Tasks”. Essa clase tem por função definir uma rota a partir das propriedades Start e End, que indicam os pontos de início e fim do trajeto, respectivamente.

Executando a aplicação e clicando sobre o botão que contém o código acima, temos a rota apresentada no mapa, com cada segmento sendo detalhado logo abaixo, como vemos na Figura 5.

Rota traçada com detalhes

Figura 5: Rota traçada com detalhes

Clicando sobre cada trecho da rota na lista, o mesmo é destacado no mapa e uma indicação em áudio é feita, sinalizando as ações necessárias naquele trecho.

Conclusão

A integração de aplicações para Windows Phone com os serviços do Bing Maps é consideravelmente simples e permite oferecer ao usuário funcionalidades de localização de pontos no mapa com facilidade.

Um exemplo de aplicação desse recurso pode ser imaginado em uma aplicação móvel de vendas, onde cada vendedor possui um aparelho e constantemente precisa localizar o endereço de seus clientes. Claro que é possível aplicar essa funcionalidade em diversos outros contextos, depende apenas da necessidade.

Espero que as informações aqui apresentadas possam ser úteis. Até a próxima.