Olá pessoal, tudo certo?
Geolocation é uma das muitas tecnologias que não integra HTML5, mas que geralmente é associada com ela. Por isso, estou abordando nessa série.
Vamos aos fatos…
O que já vimos?
Para você que está chegando agora, veja o que já foi abordado:
- HTML5 – Parte 11 – Detectando suporte (browsers)
- HTML5 – Parte 10 – Animação
- HTML5 – Parte 9 – Começando a mexer com Canvas
- HTML5 – Parte 8 – Messaging
- HTML5 – Parte 7 – Suporte para offline
- HTML5 – Parte 6 – Armazenando dados com Web SQL Databases
- HTML5 – Parte 5 – Armazenando dados com Web Storage
- HTML5 – Parte 4 – Vídeo e Áudio
- HTML5 – Parte 3 – Formulários
- HTML5 – Parte 2 – Semântica para todos
- HTML5 – Parte 1 – história e elementos de estrutura
O que é Geolocation?!
A API de Geolocation objetiva prover a capacidade de “descobrir” a localização do usuário e, opcionalmente, permitir que ele compartilhe essa informação com aplicações em que confia.
Há muitas maneiras de “descobrir” a localização do cliente – pelo IP, pela conexão com uma rede Wireless, pela antena que seu celular está conectando, ou, ainda, por um hardware específico de GPS que recebe informações de latitude e longitude diretamente de satélites.
E se o usuário não desejar compartilhar localização?
Privacidade é uma preocupação óbvia (segurança) quando falamos sobre compartilhar informações, como a localização física de um usuário, com um servidor remoto.
A especificação que normatiza Geolocation define claramente: “Aplicações de usuário não devem enviar informações de localização para websites sem permissão expressa do usuário”.E m outras palavras, se o usuário não desejar compartilhar sua localização, ele não vai.
Se você utiliza aplicativos que utilizam a API de Geolocation, já percebeu que, na prática, quando o aplicativo requisita informação, o agente (geralmente o browser) alerta o usuário e pede que ele autorize o processo.
Obtendo a localização do usuário
A API para Geolocation fica acessível por JavaScript. Observe:
function getLocationCallBack(position) { var latitude = position.coords.latitude; var longitude = position.coords.longitude; // .. } function beginGetLocation() { navigator.geolocation.getCurrentPosition(getLocationCallBack); }
Como você pode observar, o objeto navigator possui uma propriedade nova: geolocation. Esse é o ponto de acesso para a Geolocation API.
Seu uso mais básico consiste na evocação de método getCurrentLocation passando como argumento a função callback que deverá ser acionada quando os valores forem obtidos. Ou seja, o funcionamento da API é assíncrono.
O objeto passado com parâmetro para a função de callback possui as seguintes propriedades:
- coords.latitude
- coords.longitude
- coords.altitude
- coords.accuracy
- coords.altitudeAccuracy
Tratando erros
Relembrando: se o usuário não permitir que você obtenha a posição dele, você não obterá essa posição. Simples assim! No momento que você aciona a API de Geolocation, o browser (ou agente) precisa questionar o usuário quanto à autorização.
Essa é apenas uma das possíveis causas de seu contato com Geolocation falhar.
Para tratar erros, basta informar um segundo callback para getCurrentPosition. Observe:
function getLocationCB(position) { var latitude = position.coords.latitude; var longitude = position.coords.longitude; // .. } function handleErrorCB(error) { if (error.code == 1) { // usuário não autorizou } else if (error.code == 2) { // posição não está disponível } else if (error.code == 3) { // time out } else if (error.code == 0) { // desconhecido } } function beginGetLocation() { navigator.geolocation.getCurrentPosition(getLocationCB, handleErrorCB); }
Perceba que o tratamento de erros é apropriado para falhas em browsers (agentes) que possuam suporte a geolocation. Para saber como testar se seu browser oferece suporte, veja a parte 11 dessa série.
Por hoje, …
Leonardo
fevereiro 28, 2011
Parabens pelo artigo.
Descobri esse recurso a pouco tempo e fiquei muito curioso para entender, como o html5 descobre a localização do Cliente?
Digo, se eu pegar meu IP agora e tentar descobrir de qual endereço ele se originol, o maximo que conseguirei é descobrir que o IP veio da Virtual da cidade de Campinas ( http://ip-address-lookup-v4.com/lookup.php?ip=189.61.196.234 ).
Nessa linha de raciocinio, não entendo como o htm5 consegue a proesa de identificar o endereço quase exato ( 3 quadras de precisão).
Novamete, parabens pelo artigo.
elemarjr
fevereiro 28, 2011
Cabe a cada agente implementar o mecanismo de localização. Para você ter uma idéia, usando um iPhone, ele ativa o GPS para determinar a posição exata.
Honestamente, não sei precisar claramente como cada browser “resolve” a localização.
Rod
abril 6, 2011
Leonardo,
No caso de computadores estacionários, acho que o mais comum nessas situações, ao acessarmos uma página que utilize geolocation, é aparecer uma janela com um mapa, pedindo pra gente especificar manualmente onde estamos, se assim desejarmos.
Já a tendência para computadores móveis (laptops e smartphones) é ter GPS, que tá ficando cada dia mais barato, então o browser consegue informar tais coordenadas sem precisar de ajuda.