Criar aplicativos com reconhecimento de local usando geolocalização e Mapas Bing

Ao experimentar em conjunto a localização de um usuário com a lógica de negócios do seu aplicativo, você pode fornecer facilmente aos usuários do aplicativo detalhes sobre a previsão do tempo, cupons, eventos esportivos ou concertos para sua localização atual. Você pode usar as funcionalidades de geolocalização do Windows 8, juntamente com o SDK do Mapas Bing, para criar ótimos aplicativos da Windows Store com reconhecimento de local.

Vejamos como seu aplicativo pode usar o serviço de localização para fornecer aos usuários informações específicas do local com um endereço IP, uma rede WiFi ou dados de GPS. Após saber a localização, você poderá usar o SDK do Mapas Bing para mostrar ao usuário onde ele está.

Recuperando sua localização

O namespace Windows.Devices.Geolocation é usado para recuperar sua localização. Se você usará o GPS, uma rede WiFi ou um endereço IP para recuperar a localização de um usuário dependerá de dois fatores básicos:

  1. O nível de precisão solicitado. Este é o nível de precisão ideal para atender as necessidades do seu aplicativo.
  2. A disponibilidade dos dados de localização. Nem todos os dispositivos têm GPS interno. Ou talvez não haja uma rede ou conexão Wi-Fi disponível quando a localização for solicitada.

Precisão desejada

Ao solicitar uma localização, seu aplicativo deve especificar a precisão desejada para que os dados de localização possam ser retornados o mais rápido possível no intervalo determinado. Cada um dos tipos de local tem um grau de precisão:

  • GPS – o GPS fornece a maior precisão, até aproximadamente 10 metros. No entanto, se o sensor do GPS precisar ser ativado e adquirir dados de satélite para em seguida fazer a triangulação dos dados, ele poderá levar um ou dois minutos para retornar os detalhes da localização. Mas após o GPS adquirir as conexões de satélite, será possível obter o próximo ponto de localização com mais rapidez. Obviamente que quanto mais o GPS for usado, mais energia consumirá. A propriedade Geolocator.DesiredAccuracy deve ser definida como High (Alta) para permitir que o GPS adquira os dados.
  • Wi-Fi – uma conexão Wi-Fi pode fornecer uma precisão entre 300-500 metros. Se houver uma conexão, os dados de localização serão retornados mais rapidamente do que um GPS poderá obter dados de satélite. Defina a propriedade DesiredAccuracy como Default (Padrão) para obter a localização com Wi-Fi.
  • IP – a resolução no nível do IP pode fornecer uma precisão dentro de 1 quilômetro, aproximadamente. Se houver uma conexão de rede, os dados de localização serão retornados mais rapidamente do que um GPS poderá obter uma conexão de satélite. Você também define a propriedade DesiredAccuracy como Default (Padrão) para obter a localização com IP. O serviço de localização retorna a maior precisão possível e permite que você saiba o grau de precisão na propriedade Geocoordinate.Accuracy.

Preste atenção ao valor de precisão desejado. Ele pode afetar o desempenho e o consumo de energia do seu aplicativo. Por exemplo, se o seu aplicativo fornecer previsões de tempo, você raramente precisará da alta precisão do GPS. Além disso, não deixe de indicar a precisão dos seus dados exibindo o radius de erro baseado na precisão dos dados retornados. Aqui está o código C# para definir a precisão desejada:

C#

 Geolocator geolocator = new Geolocator();
geolocator.DesiredAccuracy = Windows.Devices.Geolocation.PositionAccuracy.High;

Independente da precisão que você desejar, a chamada para obter sua localização é:

C#

 Geoposition pos = await geolocator.GetGeopositionAsync().AsTask(token);

Aqui está o código JavaScript que cria uma instância da classe Geolocator, define a precisão desejada e obtém a localização atual. Observe que a variável "promise" abaixo é um objeto WinJS.Promise – você precisará usar o método done para acessar os dados da chamada para getGeopositionAsync.

JavaScript

 var geolocator = Windows.Devices.Geolocation.Geolocator();
geolocator.desiredAccuracy =
Windows.Devices.Geolocation.PositionAccuracy.high;

// Get the geoposition, capturing the request in a 'promise' object.
var promise = geolocator.getGeopositionAsync();

Lembre-se de que se você definir a precisão desejada como High (Alta), não terá certeza de que o dispositivo do usuário retornará a maior precisão. O PC do usuário talvez não tenha um GPS ou este poderá estar desligado ou não conectado ao Wi-Fi, etc. Esteja sempre preparado para processar normalmente essas instâncias de dados de precisão menor. Como você fará isso dependerá da funcionalidade do seu aplicativo. É possível continuar com a menor precisão? É possível solicitar precisão no nível do GPS? Consulte as Diretrizes para aplicativos com reconhecimento de local para obter mais informações.

Mapas Bing

O aplicativo Mapas Bing é um bom exemplo de um aplicativo que se adapta à precisão dos dados de localização disponíveis. Em um PC desktop, que em geral não tem um GPS ou Wi-Fi, ele acha a localização com base no endereço IP e a amplia para um nível de região ao mapear o local atual. Em um laptop, que normalmente tem uma placa sem fio, o aplicativo usa a conexão Wi-Fi para obter uma localização mais precisa e a amplia ainda mais ao mostrar a localização atual. Se o usuário ampliar mais ainda, o ícone da localização atual mostrará um radius de erro. Em um dispositivo com GPS, o Mapas Bing obtém os dados de localização de maior precisão do GPS e exibe uma localização mais precisa.

Bing Meteorologia

Como mencionado acima, um aplicativo como o Bing Meteorologia precisa somente das informações de região. Por isso, ele pode especificar a necessidade apenas da menor precisão, permitindo a obtenção rápida de um valor de localização. Isso aumenta a capacidade de resposta do aplicativo para o usuário. Outros exemplos de aplicativos que podem precisar somente das informações de nível regional incluem guias de estações de rádio, ofertas de compras ou feeds de notícias locais.

Exibindo dados de localização com o SDK do Mapas Bing

Após obter as informações de localização de sua chamada para GetGeopositionAsync, você desejará exibi-las em um mapa.

 

C#

 Location location = new Location(pos.Coordinate.Latitude, pos.Coordinate.Longitude);

JavaScript:

 promise.done(
  function (pos) {
    // Get the coordinates of the current location.
    var coord = pos.coordinate,
    location = new Microsoft.Maps.Location(coord.latitude, coord.longitude);
 
  },
  function (err) {
    // Handle the error.
  });

 

  • Em seguida, exiba sua localização usando o Mapas Bing. Você pode obter o SDK do Mapas Bing aqui. Você também precisará obter uma chave do Mapas Bing fazendo o registro no Portal do Mapas Bing e seguindo as instruções para Obter uma Chave do Mapas Bing. Ao se registrar, não deixe de ver as restrições de uso para cada tipo de chave e escolha uma que seja apropriada para seu aplicativo.

    Adicione um controle do Mapas Bing ao seu designer e insira sua chave nas credenciais.

 <Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:SimpleMapping"
    xmlns:d="https://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:Maps="using:Bing.Maps"
    x:Class="SimpleMapping.MainPage"
    mc:Ignorable="d">

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Maps:Map x:Name="Map" Margin="0,120,0,0" Credentials="Insert Your Bing Maps Key Here"/>
    </Grid>
</Page>
  • Agora você já pode usar o código a seguir na página do aplicativo em que o mapa é exibido. Isso define o nível de zoom do mapa e mostra a localização. Saiba mais sobre o nível de zoom em Como exibir sua localização em um Mapa Bing:

C#

 double zoomLevel = 13.0f;

Map.SetView(location, zoomLevel);

Adicionar um controle do Mapas Bing ao seu aplicativo em JavaScript e HTML exige um pouco mais de trabalho. Adicione a seguinte marca <script> ao HTML do seu aplicativo:

 

 <script type="text/javascript" 
   src="ms-appx:///Bing.Maps.JavaScript//js/veapicore.js">
/script>

Em seguida, você precisará criar uma marca <div>para conter o mapa, configurando o atributo de id para que possa acessá-lo.

 <div id=’map-div’></div>

Por fim, será necessário inicializar o controle do mapa na página em HTML. Veja aqui alguns códigos JavaScript que fazem isso:

 // Load the Microsoft.Maps.Map module and then call getMap when the 
// module has loaded.
function initMap() {
  Microsoft.Maps.loadModule('Microsoft.Maps.Map', 
    { 
      callback: getMap, 
      culture: "en", 
      homeRegion: "US" 
  });
}

// Get the div to contain the map from the interface of the app.
function getMap() {

  // Create a new instance of the Map class, passing in the app ID.
  var map = new Microsoft.Maps.Map(
    document.getElementById(mapDivId), 
    { credentials: “Insert your credentials here” });

  // Set the initial zoom level and type of map.
  map.setView({
    mapTypeId: Microsoft.Maps.MapTypeId.road,
    zoom: 3
  });
}
  • Qualquer aplicativo que usa localização deve respeitar as configurações das permissões do usuário, que podem ser alteradas a qualquer momento. O aplicativo Meteorologia usa a localização para obter a previsão do tempo para o local atual. Mas a qualquer momento, o usuário poderá acessar as Configurações e desativas as permissões de Localizações. Seu aplicativo deve sempre lidar com a possibilidade de que a permissão de Localização esteja desabilitada. Nesse caso, o aplicativo Meteorologia exibe uma mensagem "Não é possível encontrar sua localização. Altere suas permissões para que o Meteorologia possa usar sua localização". Consulte as diretrizes de experiência do usuário em Diretrizes para aplicativos com reconhecimento de local para obter exemplos de como lidar com permissões de localização.

    Aplicativo Bing Meteorologia usando a localização para obter a previsão do tempo para o local atual

 

Para obter todos os detalhes de como usar a geolocalização e o SDK do Mapas Bing, temos um novo vídeo, tópico de como fazer e exemplo de código que explica as etapas de como adquirir de forma assíncrona sua localização e usar o SDK do Mapas Bing para mostrar onde você está visualmente. O vídeo, o tópico de como fazer e o exemplo guiam você sobre como habilitar a funcionalidade de localização, como obter a localização assincronamente, como configurar o mapa para um determinado local e como configurar o ícone de localização baseado na precisão dos dados de localização. Você também pode encontrar mais informações em Mapas Bing para aplicativos da Windows Store.

Resumindo

A localização pode ser um recurso poderoso e ágil para adicionar ao seu aplicativo. Você pode fornecer ao usuário mais informações pertinentes baseado em onde ele está. Seja uma lista de estações de rádio locais, ofertas de compras, informações de trânsito ou do tempo, o controle para ajustar essas informações de acordo com a localização pode tornar seu aplicativo mais útil. A capacidade de fazer isso acontecer automaticamente, sem a interação do usuário, economiza tempo e aumenta a probabilidade de uso do seu aplicativo.

--Ross Heise, desenvolvedor de conteúdo sênior, Conteúdo para desenvolvedores do Windows

   Agradecimentos especiais a Jon Kay e Eric Schmidt pela ajuda e contribuições para esta postagem.