A geolocalização em HTML5 é usada para determinar a localização do usuário. A localização pode ser obtida de várias fontes, incluindo:
- Endereço IP
- Sistema de Posicionamento Global (GPS)
- Rede Wi-Fi
- Localização baseada em celular
1. Endereço IP
O método de geolocalização por endereço IP geralmente não é muito preciso, pois ele busca o endereço físico registrado ao IP, que pode estar a quilômetros de distância do usuário real.
2. Sistema de Posicionamento Global (GPS)
O GPS fornece uma localização precisa quando há visão clara do céu, mas pode demorar mais para obter a posição, tornando-o menos adequado para aplicações que requerem respostas rápidas.
3. Rede Wi-Fi
A geolocalização baseada em Wi-Fi calcula a posição do usuário através da triangulação com pontos de acesso conhecidos. É bastante precisa em ambientes internos, mas menos eficaz em áreas rurais com poucos pontos de acesso.
4. Localização baseada em celular
A localização baseada em celular usa a triangulação com torres de tellefonia móvel. Geralmente, este método combina informações de Wi-Fi e GPS para maior precisão.
API de Geolocalização
A API navigator.geolocation permite solicitar a localização do usuário. As funções principais são:
getCurrentPosition: Solicita a localização atual do usuário.watchPosition: Monitora as mudanças na localização do usuário.
1. Solicitação única: getCurrentPosition
Parâmetros:
successCallback: Função chamada se a solicitação for bem-sucedida.errorCallback: Função chamada se ocorrer um erro.options: Configurações opcionais como precisão, tempo limite e cache.
Exemplo de uso:
navigator.geolocation.getCurrentPosition(
function(position) {
console.log("Latitude: " + position.coords.latitude);
console.log("Longitude: " + position.coords.longitude);
// Outros detalhes
},
function(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
alert("Permissão negada.");
break;
case error.POSITION_UNAVAILABLE:
alert("Posição indisponível.");
break;
case error.TIMEOUT:
alert("Tempo esgotado.");
break;
default:
alert("Erro desconhecido.");
break;
}
},
{ enableHighAccuracy: true, timeout: 10000, maximumAge: 0 }
);
2. Solicitação contínua: watchPosition
Parâmetros:
successCallback: Função chamada sempre que a localização muda.errorCallback: Função chamada se ocorrer um erro.options: Configurações opcionais como precisão, tempo limite e cache.
Exemplo de uso:
var watchId = navigator.geolocation.watchPosition(
function(position) {
console.log("Latitude: " + position.coords.latitude);
console.log("Longitude: " + position.coords.longitude);
// Outros detalhes
},
function(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
alert("Permissão negada.");
break;
case error.POSITION_UNAVAILABLE:
alert("Posição indisponível.");
break;
case error.TIMEOUT:
alert("Tempo esgotado.");
break;
default:
alert("Erro desconhecido.");
break;
}
},
{ enableHighAccuracy: true, timeout: 10000, maximumAge: 0 }
);
// Para parar a monitorização
navigator.geolocation.clearWatch(watchId);
Integração com o Baidu Maps
Para integrar a geolocalização com o Baidu Maps, você pode usar a API do Baidu Maps para exibir a localização do usuário em um mapa. Abaixo está um exemplo de como fazer isso:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
body, html, #allmap { width: 100%; height: 100%; overflow: hidden; margin: 0; font-family: "微软雅黑"; }
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=44R7nksmLBjTE1fkdlXGd0VU"></script>
<title>Mapa</title>
</head>
<body>
<input type="button" value="Solicitar" id="btn" style="width: 100%; height: 100px;">
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
var btn = document.getElementById("btn");
btn.onclick = function() {
navigator.geolocation.getCurrentPosition(
function(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var map = new BMap.Map("allmap");
map.centerAndZoom(new BMap.Point(longitude, latitude), 11);
map.addControl(new BMap.MapTypeControl());
map.enableScrollWheelZoom(true);
},
function(error) {
switch(error.code) {
case 1:
alert("Permissão negada.");
break;
case 2:
alert("Posição indisponível.");
break;
case 3:
alert("Tempo esgotado.");
break;
default:
alert("Erro desconhecido.");
break;
}
},
{ enableHighAccuracy: true, timeout: 99999999, maximumAge: 9999999999 }
);
}
</script>