HTML 5 – Parte 12 – Geolocation

Posted on fevereiro 26, 2011 by elemarjr

3


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:

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.

image

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, …

Smiley piscando

Posted in: html5