iwtraining

Geolocalização Mobile

Geolocalização

A API de Geolocalização permite a um aplicativo aproveitar os recursos de GPS de um dispositivo móvel e determinar a localização do dispositivo sobre a superfície da terra. Usando essa API,  um aplicativo pode verificar manualmente atual posição do dispositivo ou pode criar um observador local que fará com que o aplicativo seja periodicamente notificado da localização física do dispositivo.

O dispositivo executando o aplicativo deve ser capaz de obter uma coordenada, utilizando tanto uma antena de GPS e  software associado ou algum mecanismo alternativo para determinar a localização do dispositivo.

Embora as capacidades de geolocalização em smartphones sejam cada vez mais frequentes em modelos mais novos, um aplicativo não pode garantir que o dispositivo tenha esses recursos. Há muitas questões  que podem afetar a capacidade do dispositivo para informar sua localização. Por isso, devemos ficar atentos e estar preparados para isto.

Como a maioria dos navegadores HTML 5 móveis já são compatíveis com a especificação W3C Geolocation API Specification ( www.w3.org/TR/geolocation-API ), aplicações PhoneGap podem usar esta API diretamente e hoje este é o comportamento padrão do PhoneGap. Para dispositivos que não fornecem uma API de Geolocalização como os dispositivos BlackBerry, a equipe de desenvolvimento PhoneGap incluiu um API de Geolocalização na biblioteca de JavaScript.

Plugin

Lembre-se de importar o plugin antes de usar.

$ cordova plugin add org.apache.cordova.geolocation

Obtendo a orientação do dispositivo

Para obter uma posição utilizaremos o seguinte código:

var geolocationOptions = {
    timeout : 3000,
    enableHighAccuracy : true
};
navigator.geolocation.getCurrentPosition(onGeolocationSuccess, ongeolocationError, geolocationOptions);

A chamada  getCurrentPosition recebe três parâmetros, um para quando obtivermos uma posição, um para caso de erro e outro com algumas configurações de geolocalização.

  • enableHighAccuracy: valor booleano que indica se o aplicativo gostaria de medir a localização do dispositivo com um maior grau de acurácia . Ao habilitar essa opção , o aplicativo pode obter resultados mais precisos, mas, ao mesmo tempo, ele vai colocar uma carga maior sobre o dispositivo , o que pode diminuir o desempenho e vida útil da bateria , enquanto o aplicativo é executado .
  • fequency: Define em milisegundos quantas vezes o local é medido. Esta opção aplica-se somente ao implementar um observador de localização (descrito mais adiante neste capítulo). Esta é uma configuração específica do PhoneGap , e como PhoneGap implementa mais de perto a especificação W3C , esta propriedade será removida.
  • maximumAge: Define a idade máxima (em milissegundos) de um valor de localização em cache que serão aceitos pelo aplicativo. Um valor menor para obtenção de um dispositivo de localização atual 281 esta propriedade deve forçar a API para apenas entregar localização mais recente atualizações.
  • timeout: A quantidade máxima de tempo (em milissegundos) que é permitida a passagem entre a chamada a qualquer geolocation.getCurrentPosition ou geolocation.watchPosition até que o callback onGeolocationSuccess é executado.

Sabendo que já mapeamos os objetos html (ids), basta que joguemos os valores recebidos neles atraves da propriedade innerHTML. Abaixo um exemplo de como trabalhar as funções:

function onGeolocationSuccess( position ) {
    msg.innerHTML = "Deu certo!";

    latitude.innerHTML = 'Latitude: ' + position.coords.latitude;
    longitude.innerHTML = 'Longitude: ' + position.coords.longitude;
    altitude.innerHTML = 'Altitude: ' + position.coords.altitude;
    accuracy.innerHTML = 'Acurracy: ' + position.coords.accuracy;
    timestamp.innerHTML = 'Timestamp: ' + position.timestamp;
}

function onGeolocationError( err ) {
    erro.innerHTML = 'Erro: ' + err.message;
}

Observando as mudanças de Geolocalização

A função watchPosition permite que um aplicativo definir um relógio que dispara várias vezes em um intervalo de tempo específico.

Primeiramente, de forma global, crie uma variável de nome watchID.

var watchID;

Mais uma vez, faremos a chamada com um terceiro parâmetro, options. Ele é um objeto genérico que informará a frequência de atualização dos dados.

var options = {
    timeout : 3000,
    enableHighAccuracy : true
};

watchID = navigator.geolocation.watchPosition(onGeolocationSuccess, onGeolocationError, options);

Teremos uma leve alteração caso haja algum erro, visto que devemos limpar o observador.

function onGeolocationError( err ) {

    navigator.geolocation.clearWatch(watchID);
    erro.innerHTML = 'Erro: ' + err.message;
}

Está com duvidas?

Aluno iwtraining tem acesso a um fórum exclusivo para discutir com os instrutores e outros alunos. Acesse agora mesmo!

Share this article

Em seus 12 anos de experiência, tanto em design como em desenvolvimento, trabalhou em diversos projetos, muitos de grande porte, para clientes como Banco do Nordeste, Sebrae, Anna Pegova, Grupo Deib Otoch, dentre outros. Como designer, trabalha com o Adobe Photoshop desde a versão 3.0, além do Illustrator, sendo certificado pela Adobe (ACE e ACI) nestes softwares. Como desenvolvedor, foca seus esforços atualmente no ActionScript 3.0 (Plataforma Flash) e Objective-C (iOS). Ministra, desde 2005, treinamentos na @iwtraining para estudantes e profissionais, além de grandes empresas como Cagece, TRE, TRT, Esmaltec, Grupo Edson Queiroz, Sebrae, Senac, Correios.

Posts Relacionados

Deixe um comentário