sexta-feira, 7 de dezembro de 2012

Geolocation com HTML 5 e API Mapas do Google

O HTML 5 traz bastante simplicidade: Geolocalização (Geolocation), LocalStorage (Armazenamento local), EditableConteúdo editável, PlaceHolders, Expressões regulares e etc.

Neste post vou escrever sobre a Geolocation. A propósito, se não autorizou o acesso à sua localização, volte e autorize para vê-la no mapa.


              

<< Sua geolocalização vai aparecer aqui >>

A Geolocation do HTML 5 recupera a localização do usuário, especificamente a longitude e a latitude do ponto de acesso à internet. Isso pode variar de rede à rede e das configurações que cada uma pode ter. Mas em situações normais, a localização do acesso será identifica.

Juntando a Geolocation com a API de mapas do Google, temos o resultado acima, que é a exibição da localização no mapa.

Vamos lá, aos códigos! Primeiros exemplos e comentários e depois todo código disponível para download.

Como vamos monta um mapa, é preciso fazer referência à API de Mapa do Google, linha 8. O parâmetro sensor=false indica que não estou usando a API a partir de aplicação com sensor, como um GPS de um Smartphone por exemplo:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>HTML 5 - Geolocalização e API de Mapa Google</title>
<!-- Adiciona arquivo externo de javascript - API de Mapa do Google -->
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
É preciso criar as funções javascript para ordenar os acontecimentos, que são 3: Recuperação da localização, Montagem do mapa e tratamento de erros.

Primeiro criamos a que recupera a localização. Ela verifica se o Navegador suporta Geolocalização e em caso positivo segue para a montagem do mapa:
<!-- Inicia os scripts: o que recupera a geolocalização e o que exibe o mapa -->
<script type="text/javascript">
var mensagens = document.getElementById("mensagens");
// Função que recupera a Geolocalizacao, utilizando funções do próprio navegador.
function recuperaGeolocalizacao() {
// Se o navegador suporta geolocalização, recupera as informações e chama a função que vai usá-las para exibir o mapa;
if (navigator.geolocation) {
//Sucesso
navigator.geolocation.getCurrentPosition(MostraLocalizacao, Erro);
}
//Erro
else {
mensagens.innerHTML = "A geolocalização não é suportada pelo seu navegador.";
}
}
Depois, criamos a função que monta o mapa. Ela recebe os parâmetros de latitude e longitude do resultado da função que recupera a Geolocalização.

O objeto retornado, o position, tem as propriedades latitude e longitude, dentro de coords. Para a API de mapa do Google, precisamos apenas dessas duas informações:
// Essa é a função que recebe os dados de Geolocalização, no objeto position
function MostraLocalizacao(position) {
// Recupera a latitude
lat = position.coords.latitude;
lon = position.coords.longitude;
latitude = document.getElementById('latitude')
latitude.innerHTML = "Latitude: " + lat;
longitude = document.getElementById('longitude')
longitude.innerHTML = "Longitude: " + lon;
latlon = new google.maps.LatLng(lat, lon)
divMapa = document.getElementById('divMapa')
divMapa.style.height = '250px';
divMapa.style.width = '500px';
var Opcoes = {
center: latlon, zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: true,
navigationControlOptions: { style: google.maps.NavigationControlStyle.SMALL }
};
var map = new google.maps.Map(document.getElementById("divMapa"), Opcoes);
var marcador = new google.maps.Marker({ position: latlon, map: map, title: "Você está aqui" });
}
No uso da API, podemos configurar opções, como altura (height), largura (width), tipo de mapa (MapTypeId) e etc. Para conhecer mais sobre esta API, o ideal é acessar a documentação completa on-line em https://developers.google.com/maps/documentation/javascript/.

Acima foi a função de sucesso. Abaixo a função de erro (quando não o navegador não suporta Geolocation):
function Erro(error) {
switch (error.code) {
case error.PERMISSION_DENIED:
mensagens.innerHTML = "A permissão para buscar Geolocalização foi negada pelo navegador.<br /><br />Tente gerenciar as configurações de compartilhar local."
break;
case error.POSITION_UNAVAILABLE:
mensagens.innerHTML = "Sua localização está indisponível."
break;
case error.TIMEOUT:
mensagens.innerHTML = "A busca pela sua localização excedeu o tempo limite."
break;
case error.UNKNOWN_ERROR:
mensagens.innerHTML = "Ocorreu um erro desconhecido."
break;
}
}

É preciso também preparar os elementos que receberão as mensagens de sucesso ou erro e uma <div> que receberá o mapa da API do google. Veja o exemplo das mensagens:

<!-- No P id = mensagens é apresentada mensagem de sucesso ou de erro, quando o caso -->
<p id="mensagens">Esta é a sua geolocalização:</p>
<p>
<!-- Em caso de sucesso, nos itens latitude e longitude serão adicionados os dados de geolocalização -->
<span id="latitude"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span id="longitude"></span>
</p>
<!-- div que recebe o mapa através do uso da API Google -->
<div id="divMapa"></div>

Concluídos estes passos, basta chamar a função que recupera a Geolocalização, no caso a recuperaGeolocalizacao(). Pode ser no onclick de um botão ou no onload da página dentro da tag <body> , como no exemplo a seguir. A própria função se encarregará de montar o mapa ou mostrar o erro, a depender do resultado.

</head>
<!-- Quando carrega a página, chama a função recuperaGeolocalizacao() do script javascript da página.
Esta função também pode ser chamada por botões. -->
<body onload="recuperaGeolocalizacao();">

E é isso, o resultado é o local exibido no mapa. Se copiar a latitude e longitude e lançar no Google, o resultado é exatamente o mesmo. Teste!

Fica o código completo disponível para download aqui. Espero ter sido útil!

Nenhum comentário:

Postar um comentário