Allen Gomes Vidal 
@allenvidal
O W3C Geolocation API, fornece uma maneira 
uniforme para que os desenvolvedores criem 
aplicações web baseadas em localização. 
A implementação de Geolocation através do HTML5, 
significa o uso de scripts nos navegadores para 
localizar onde um determinado usuário está.
A API de Geolocalização permite que o usuário 
compartilhe sua localização em sites confiáveis. 
A latitude e longitude são disponibilizadas na página 
via JavaScript, que por sua vez pode ser enviado a 
um servidor web e fazer coisas como encontrar locais 
ao seu redor ou mostrar sua posição em um mapa.
O Navegador reúne informações sobre pontos de 
acesso sem fio nas proximidades e endereço IP do 
computador do usuário. 
Em seguida, envia essa informação para o prestador 
de serviços de Geolocalização padrão, o Google 
Location Services, para obter uma estimativa da 
localização. Essa estimativa é então compartilhada 
com o site solicitante.
Todos os locais retornados pelos 
provedores de serviços são 
apenas estimativas e não garante 
a exatidão dos locais previstos.
Alguns aparelhos — como iPhone e Android, 
suportam dois métodos para mostrar sua localização. 
O primeiro método triangula a sua posição 
baseando-se na sua localização relativa as diferentes 
torres da sua operadora de celular. 
Este método é rápido e não necessita de qualquer 
hardware de GPS dedicado, mas ele só pega uma 
ideia aproximada de onde você está.
O segundo método atualmente usa algum hardware 
de GPS dedicado em seu aparelho para se comunicar 
com algum satélite de GPS dedicado que está 
orbitando na Terra. 
O GPS normalmente pode identificar a sua 
localização a poucos metros. 
O lado negativo de um chip de GPS dedicado em seu 
aparelho é que consome muita energia, então 
telefones e outros dispositivos geralmente o desligam 
na maioria das vezes.
A API de Geolocalização centraliza tudo em volta da 
propriedade global chamada navigator através do 
objeto navigator.geolocation 
//simples uso da API de geolocalização: 
function get_location() { 
navigator.geolocation.getCurrentPosition(sucessFunction); } 
Geolocation.getCurrentPosition() método usado para obter a 
posição do dispositivo.
Porém este código não detecta o posicionamento 
(latitude e longitude), e não trata os erros que 
podem ocorrer. 
Você deve verificar antes de tudo se o navegador 
oferece suporte há API. 
if (navigator.geolocation) { 
navigator.geolocation.getCurrentPosition(successFunction); 
} else { 
alert ('Seu Navegador não tem suporte a API Geolocation'); 
}
O código anterior, faz uma chamada a função 
callback (sucessFunction). A função de callback 
será chamada com um único parâmetro, o qual 
receberá um objeto de posicionamento, através 
deste pode-se acessar dois outros objetos: coords e 
timestamp. 
function successFunction(position) { 
var lat = position.coords.latitude; 
var lon = position.coords.longitude; 
alert(‘Sua latitude é :'+lat+' e longitude é '+lon); 
}
O timestamp traz somente a data e o horário de 
quando a localização foi calculada. 
Já o objeto coords possui propriedades 
como latitude e longitude, onde através dessas 
propriedades podemos descobrir a localização física 
do usuário no mundo. 
function successFunction(position) { 
var lat = position.coords.latitude; 
var lon = position.coords.longitude; 
alert(‘Sua latitude é :'+lat+' e longitude é '+lon); 
}
Caso o navegador tenha suporte a API de 
Geolocation e tudo ocorra bem, é bom sabermos 
que a solicitação da localização do usuário é restrita 
, ou seja ele será notificado que algum sistema quer 
obter a sua localização e cabe a ele aceitar ou não 
compartilhar sua localização. 
No Mozilla Firefox, a chamada do 
método getCurrentPosition() da 
API de geolocalização fará com que o browser mostre uma 
“barra de notificação” no topo da janela do navegador.
Caso o usuário não permita que o sistema possa 
obter sua localização, o que apareceria como 
mensagem? 
Podemos utilizar um outro parâmetro (opcional) para o 
método getCurrentPosition(), este parâmetro também 
espera receber uma função callback para tratar os 
erros que podem ocorrer. 
Ao chamar a função callback errorFunction(position), 
será retornado para a mesma um objeto do tipo 
positionError.
Veja abaixo como ficaria o nosso código 
if (navigator.geolocation) { 
navigator.geolocation.getCurrentPosition(successFunction,error 
Function); 
} else { alert ('Seu Navegador não tem suporte a API 
Geolocation'); } 
function errorFunction(position) { 
alert (“Erro!"); }
Através do objeto (positionError), podemos tratar 
os erros, acessando a sua propriedade code, veja a 
seguir a relação do significado de cada erro. 
CODE 1 - Permissão negada 
O usuário clicou em "não compartilhar". 
CODE 2 - Posição indisponível 
O agente de usuário está desconectado, os satélites de GPS não 
puderam ser alcançados ou algum erro semelhante. 
CODE 3 - Timeout 
Tempo esgotado ao obter uma posição. Você pode definir o tempo 
máximo. 
CODE 0 - Erro desconhecido 
Alguma outra coisa impediu o agente de usuário de obter uma 
posição.
Veja como ficaria a função errorFunction(position), 
com a personalização dos códigos de erro. 
function errorFunction(position) { 
switch (position.code) { 
case 1: alert('Você negou o acesso à sua localização!'); 
break; 
case 2: alert('Não foi possível acessar sua posição!'); 
break; 
case 3: alert('Timeout ao tentar buscar sua localização!'); 
break; } 
}
O terceiro parâmetro também opcional do método 
getCurrentPosition() nos retorna um objeto de 
configuração positionOptions, o qual contempla das 
seguintes propriedades: 
enableHighAccuracy (boolean) 
Se TRUE, liga o modo de alta precisão. Num celular isso pode instruir 
o navegador, por exemplo, a usar o GPS ao invés da triangulação 
GPRS. 
Timeout (long) 
O tempo em milissegundos que o agente do usuário vai esperar pela 
posição antes de disparar um erro tipo 3. 
maximumAge (long) 
O tempo, em milissegundos, que o navegador pode cachear a 
posição.
Como ficaria o código: 
if (navigator.geolocation) { 
navigator.geolocation.getCurrentPosition 
(successFunction, errorFunction, options); 
} else { 
alert ('Seu Navegador não tem suporte a API 
Geolocation'); } 
var options = { 
enableHighAccuracy: true, 
timeout: 5000, 
maximumAge: 0 };
A propriedade enableHighAccuracy é exatamente o 
que se parece. Se for verdadeiro, e o dispositivo tiver 
suporte para tal, e o usuário permitir compartilhar sua 
posição, então o dispositivo irá tentar fornecer uma 
precisão maior. 
Tanto iPhones quanto Androids tem uma permissão 
separada para baixa e alta precisão, por isso, é 
possível que a chamada getCurrentPosition() 
com enableHighAccuracy: true possa falhar, mas 
chamar com enableHighAccuracy: false poderá dar 
certo.
A propriedade maximumAge permite que os 
dispositivos respondam imediatamente com uma 
posição em cache. 
Por exemplo, vamos chamar o 
método getCurrentPosition() por um período, o usuário 
permitiu, e a função de callback chamou a posição que 
foi calculada exatamente às 10:00 horas da manhã, 
você chamou o método getCurrentPosition() novamente 
com a propriedade maximumAge em 90000. 
navigator.geolocation.getCurrentPosition( 
successFunction, errorFunction, {maximumAge: 90000});
Neste caso não precisamos necessariamente da posição 
atual do usuário. 
Ficaremos satisfeitos sabendo onde ele esteve em 90 
segundos atrás (90000 millisegundos). 
Então o dispositivo não precisa recalcular a localização do 
usuário novamente. Ele somente retorna exatamente a 
mesma informação que foi retornada na primeira 
chamada: mesma latitude, mesma longitude, mesma 
precisão, e mesmo timestamp (10:00 da manhã).
O método watchPosition() tem a mesma estrutura que o 
método getCurrentPosition(). 
Tem duas funcões de callback, uma necessária para 
sucesso e uma opcional para qualquer erro que possa 
dar, e também pode ter um objeto opcional 
PositionOptions que terá todas as mesmas propriedades 
apresentadas anteriormente. 
A diferença é que sua função de callback irá ser chamada 
toda vez que a localização do usuário mudar.
Não há necessidade de pesquisar a posição do usuário a 
todo momento. 
O dispositivo é que irá determinar o melhor intervalo pra 
pesquisa da localização, e o mesmo irá chamar sua 
função de callback sempre que a posição do usuário 
mudar. 
Você pode utilizar isto para atualizar um marcador em um 
mapa, por exemplo, fornecendo instruções sobre onde 
deve ir, ou o que quiser.
 http://dev.w3.org/geo/api/spec-source.html 
 http://diveintohtml5.com.br/geolocation.html#w3c 
 http://dev.opera.com/articles/view/how-to-use-the-w3c-geolocation-api/ 
 http://dev.opera.com/articles/view/w3c-device-orientation-api/ 
 https://developer.mozilla.org/en-US/docs/Web/API/Navigator 
 https://developer.mozilla.org/en- 
US/docs/Web/API/Geolocation.getCurrentPosition 
 http://tableless.com.br/html5/?chapter=24 
 http://www.mozilla.org/en-US/firefox/geolocation/ 
 http://docs.phonegap.com/en/2.0.0/cordova_geolocation_geolocation.m 
d.html#geolocation.watchPosition 
 http://docs.phonegap.com/en/2.0.0/cordova_geolocation_geolocation.m 
d.html#geolocation.watchPosition

API Geolocation

  • 1.
    Allen Gomes Vidal @allenvidal
  • 2.
    O W3C GeolocationAPI, fornece uma maneira uniforme para que os desenvolvedores criem aplicações web baseadas em localização. A implementação de Geolocation através do HTML5, significa o uso de scripts nos navegadores para localizar onde um determinado usuário está.
  • 3.
    A API deGeolocalização permite que o usuário compartilhe sua localização em sites confiáveis. A latitude e longitude são disponibilizadas na página via JavaScript, que por sua vez pode ser enviado a um servidor web e fazer coisas como encontrar locais ao seu redor ou mostrar sua posição em um mapa.
  • 5.
    O Navegador reúneinformações sobre pontos de acesso sem fio nas proximidades e endereço IP do computador do usuário. Em seguida, envia essa informação para o prestador de serviços de Geolocalização padrão, o Google Location Services, para obter uma estimativa da localização. Essa estimativa é então compartilhada com o site solicitante.
  • 6.
    Todos os locaisretornados pelos provedores de serviços são apenas estimativas e não garante a exatidão dos locais previstos.
  • 7.
    Alguns aparelhos —como iPhone e Android, suportam dois métodos para mostrar sua localização. O primeiro método triangula a sua posição baseando-se na sua localização relativa as diferentes torres da sua operadora de celular. Este método é rápido e não necessita de qualquer hardware de GPS dedicado, mas ele só pega uma ideia aproximada de onde você está.
  • 8.
    O segundo métodoatualmente usa algum hardware de GPS dedicado em seu aparelho para se comunicar com algum satélite de GPS dedicado que está orbitando na Terra. O GPS normalmente pode identificar a sua localização a poucos metros. O lado negativo de um chip de GPS dedicado em seu aparelho é que consome muita energia, então telefones e outros dispositivos geralmente o desligam na maioria das vezes.
  • 9.
    A API deGeolocalização centraliza tudo em volta da propriedade global chamada navigator através do objeto navigator.geolocation //simples uso da API de geolocalização: function get_location() { navigator.geolocation.getCurrentPosition(sucessFunction); } Geolocation.getCurrentPosition() método usado para obter a posição do dispositivo.
  • 10.
    Porém este códigonão detecta o posicionamento (latitude e longitude), e não trata os erros que podem ocorrer. Você deve verificar antes de tudo se o navegador oferece suporte há API. if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(successFunction); } else { alert ('Seu Navegador não tem suporte a API Geolocation'); }
  • 11.
    O código anterior,faz uma chamada a função callback (sucessFunction). A função de callback será chamada com um único parâmetro, o qual receberá um objeto de posicionamento, através deste pode-se acessar dois outros objetos: coords e timestamp. function successFunction(position) { var lat = position.coords.latitude; var lon = position.coords.longitude; alert(‘Sua latitude é :'+lat+' e longitude é '+lon); }
  • 12.
    O timestamp trazsomente a data e o horário de quando a localização foi calculada. Já o objeto coords possui propriedades como latitude e longitude, onde através dessas propriedades podemos descobrir a localização física do usuário no mundo. function successFunction(position) { var lat = position.coords.latitude; var lon = position.coords.longitude; alert(‘Sua latitude é :'+lat+' e longitude é '+lon); }
  • 13.
    Caso o navegadortenha suporte a API de Geolocation e tudo ocorra bem, é bom sabermos que a solicitação da localização do usuário é restrita , ou seja ele será notificado que algum sistema quer obter a sua localização e cabe a ele aceitar ou não compartilhar sua localização. No Mozilla Firefox, a chamada do método getCurrentPosition() da API de geolocalização fará com que o browser mostre uma “barra de notificação” no topo da janela do navegador.
  • 14.
    Caso o usuárionão permita que o sistema possa obter sua localização, o que apareceria como mensagem? Podemos utilizar um outro parâmetro (opcional) para o método getCurrentPosition(), este parâmetro também espera receber uma função callback para tratar os erros que podem ocorrer. Ao chamar a função callback errorFunction(position), será retornado para a mesma um objeto do tipo positionError.
  • 15.
    Veja abaixo comoficaria o nosso código if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(successFunction,error Function); } else { alert ('Seu Navegador não tem suporte a API Geolocation'); } function errorFunction(position) { alert (“Erro!"); }
  • 16.
    Através do objeto(positionError), podemos tratar os erros, acessando a sua propriedade code, veja a seguir a relação do significado de cada erro. CODE 1 - Permissão negada O usuário clicou em "não compartilhar". CODE 2 - Posição indisponível O agente de usuário está desconectado, os satélites de GPS não puderam ser alcançados ou algum erro semelhante. CODE 3 - Timeout Tempo esgotado ao obter uma posição. Você pode definir o tempo máximo. CODE 0 - Erro desconhecido Alguma outra coisa impediu o agente de usuário de obter uma posição.
  • 17.
    Veja como ficariaa função errorFunction(position), com a personalização dos códigos de erro. function errorFunction(position) { switch (position.code) { case 1: alert('Você negou o acesso à sua localização!'); break; case 2: alert('Não foi possível acessar sua posição!'); break; case 3: alert('Timeout ao tentar buscar sua localização!'); break; } }
  • 18.
    O terceiro parâmetrotambém opcional do método getCurrentPosition() nos retorna um objeto de configuração positionOptions, o qual contempla das seguintes propriedades: enableHighAccuracy (boolean) Se TRUE, liga o modo de alta precisão. Num celular isso pode instruir o navegador, por exemplo, a usar o GPS ao invés da triangulação GPRS. Timeout (long) O tempo em milissegundos que o agente do usuário vai esperar pela posição antes de disparar um erro tipo 3. maximumAge (long) O tempo, em milissegundos, que o navegador pode cachear a posição.
  • 19.
    Como ficaria ocódigo: if (navigator.geolocation) { navigator.geolocation.getCurrentPosition (successFunction, errorFunction, options); } else { alert ('Seu Navegador não tem suporte a API Geolocation'); } var options = { enableHighAccuracy: true, timeout: 5000, maximumAge: 0 };
  • 20.
    A propriedade enableHighAccuracyé exatamente o que se parece. Se for verdadeiro, e o dispositivo tiver suporte para tal, e o usuário permitir compartilhar sua posição, então o dispositivo irá tentar fornecer uma precisão maior. Tanto iPhones quanto Androids tem uma permissão separada para baixa e alta precisão, por isso, é possível que a chamada getCurrentPosition() com enableHighAccuracy: true possa falhar, mas chamar com enableHighAccuracy: false poderá dar certo.
  • 21.
    A propriedade maximumAgepermite que os dispositivos respondam imediatamente com uma posição em cache. Por exemplo, vamos chamar o método getCurrentPosition() por um período, o usuário permitiu, e a função de callback chamou a posição que foi calculada exatamente às 10:00 horas da manhã, você chamou o método getCurrentPosition() novamente com a propriedade maximumAge em 90000. navigator.geolocation.getCurrentPosition( successFunction, errorFunction, {maximumAge: 90000});
  • 22.
    Neste caso nãoprecisamos necessariamente da posição atual do usuário. Ficaremos satisfeitos sabendo onde ele esteve em 90 segundos atrás (90000 millisegundos). Então o dispositivo não precisa recalcular a localização do usuário novamente. Ele somente retorna exatamente a mesma informação que foi retornada na primeira chamada: mesma latitude, mesma longitude, mesma precisão, e mesmo timestamp (10:00 da manhã).
  • 23.
    O método watchPosition()tem a mesma estrutura que o método getCurrentPosition(). Tem duas funcões de callback, uma necessária para sucesso e uma opcional para qualquer erro que possa dar, e também pode ter um objeto opcional PositionOptions que terá todas as mesmas propriedades apresentadas anteriormente. A diferença é que sua função de callback irá ser chamada toda vez que a localização do usuário mudar.
  • 24.
    Não há necessidadede pesquisar a posição do usuário a todo momento. O dispositivo é que irá determinar o melhor intervalo pra pesquisa da localização, e o mesmo irá chamar sua função de callback sempre que a posição do usuário mudar. Você pode utilizar isto para atualizar um marcador em um mapa, por exemplo, fornecendo instruções sobre onde deve ir, ou o que quiser.
  • 25.
     http://dev.w3.org/geo/api/spec-source.html http://diveintohtml5.com.br/geolocation.html#w3c  http://dev.opera.com/articles/view/how-to-use-the-w3c-geolocation-api/  http://dev.opera.com/articles/view/w3c-device-orientation-api/  https://developer.mozilla.org/en-US/docs/Web/API/Navigator  https://developer.mozilla.org/en- US/docs/Web/API/Geolocation.getCurrentPosition  http://tableless.com.br/html5/?chapter=24  http://www.mozilla.org/en-US/firefox/geolocation/  http://docs.phonegap.com/en/2.0.0/cordova_geolocation_geolocation.m d.html#geolocation.watchPosition  http://docs.phonegap.com/en/2.0.0/cordova_geolocation_geolocation.m d.html#geolocation.watchPosition

Notas do Editor

  • #4 Vantagens: Localizar informações focadas em seu país, Acessar sites já no idioma de origem do usuário Enviar propagandas baseadas em sua localização (interesse)
  • #5 Uma assinatura em uma rede de telefonia móvel que suporte GPRS GSM é a rede que seu aparelho usa para se comunicar. Algumas outras (CDMA, TDMA, AMPS); GPRS é um protocolo de comunicação que permite que seu aparelho troque dados pela rede. Alguns outros (EDGE, 3G).
  • #10 A função sucessFunction, vai ser chamada e passada pra mesma a posição geográfica por parâmetro. Callbacks nada mais são do que funções que são passadas como argumento de uma outra função.
  • #12 A latitude especifica o ponto norte/sul na Terra e a longitude o ponto leste/oeste. A latitude é medida a partir do equador e a longitude é medida a partir de Greenwich em Inglaterra.
  • #19 Até então não funciona no IOS este método.