HTML5 Mestre dos Mestres • Aula Suprema 36

Geolocalização com Consentimento

Geolocalização conecta o mundo digital ao espaço físico. Mas localização é dado sensível: o Mestre solicita, explica, trata erros e oferece alternativa manual.

NARRAÇÃO MESTRE

Narrador Mestre

Ouça a aula, revise blocos e estude com foco.

Pronto para narrar. As vozes disponíveis dependem do navegador e do sistema.

Abertura de impacto

Localização é contexto, não invasão

A Geolocation API permite solicitar a posição aproximada do usuário pelo navegador. Ela pode alimentar mapas, lojas próximas, entregas, clima, transporte, check-in, localização de serviços e experiências personalizadas.

Regra Mestre:

O dado é do usuário. O site deve explicar o motivo, pedir permissão, respeitar a recusa e continuar funcionando com alternativa manual.

  • Localização manual: usuário digita CEP, cidade ou endereço.
  • Localização via navegador: o navegador solicita consentimento e entrega coordenadas ao JavaScript.
API do navegador

navigator.geolocation e getCurrentPosition

Geolocalização não é uma tag HTML visual. É uma API JavaScript do navegador. O ponto de entrada é navigator.geolocation. O método principal é getCurrentPosition().

if ("geolocation" in navigator) {
  navigator.geolocation.getCurrentPosition(sucesso, erro);
} else {
  console.log("Geolocalização não suportada neste navegador.");
}

function sucesso(position) {
  const lat = position.coords.latitude;
  const lon = position.coords.longitude;
  const accuracy = position.coords.accuracy;

  console.log(`Latitude: ${lat}, Longitude: ${lon}`);
  console.log(`Precisão aproximada: ${accuracy} metros`);
}

function erro(error) {
  if (error.code === 1) {
    alert("Permissão negada. Você pode informar seu CEP manualmente.");
  } else if (error.code === 2) {
    alert("Localização indisponível no momento.");
  } else if (error.code === 3) {
    alert("Tempo de busca excedido. Tente novamente.");
  }
}
Erros comuns:

Chamar a API sem verificar suporte, ignorar permissão negada, não tratar falha e achar que HTML sozinho pega localização sem JavaScript.

Dados geográficos

Latitude, longitude, accuracy, altitude, heading, speed e timestamp

O objeto position contém coords e timestamp. O Mestre não promete precisão absoluta: ele lê a margem de erro em metros e explica o limite técnico.

Latitude Posição norte-sul
Longitude Posição leste-oeste
Accuracy Margem de erro em metros
Altitude Altura em relação ao nível do mar
Heading Direção do movimento
Speed Velocidade em metros por segundo
const lat = position.coords.latitude;
const lon = position.coords.longitude;
const accuracy = position.coords.accuracy;
const altitude = position.coords.altitude;
const heading = position.coords.heading;
const speed = position.coords.speed;
const capturadoEm = new Date(position.timestamp);

document.querySelector("#resultado").textContent =
  `Latitude: ${lat}, Longitude: ${lon}, precisão: ${accuracy}m`;
Erro de interpretação:

Mostrar coordenadas brutas sem contexto ou prometer localização exata. A precisão varia por GPS, Wi-Fi, torres de celular e IP.

Controle avançado

Opções, watchPosition, clearWatch, bateria e UX

getCurrentPosition captura uma foto instantânea. watchPosition acompanha mudanças ao longo do tempo. Todo rastreamento precisa de botão para parar.

const opcoes = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 60000
};

navigator.geolocation.getCurrentPosition(sucesso, erro, opcoes);

let watchID;

function iniciarRastreamento() {
  watchID = navigator.geolocation.watchPosition(sucesso, erro, opcoes);
}

function pararRastreamento() {
  if (watchID) {
    navigator.geolocation.clearWatch(watchID);
    watchID = null;
  }
}
  • enableHighAccuracy: pede maior precisão, mas consome mais bateria.
  • timeout: tempo máximo de espera.
  • maximumAge: aceita posição em cache por determinado tempo.
  • watchPosition: rastreamento contínuo.
  • clearWatch: interrompe rastreamento.
Erro crítico:

Deixar watchPosition rodando sem clearWatch. Isso consome bateria e viola a confiança do usuário.

Privacidade e consentimento

Transparência antes da permissão

O pedido do navegador nunca deve ser surpresa. Antes de chamar a API, explique por que você precisa da localização, qual benefício será entregue e que o usuário pode negar.

Simulação de interface transparente

Para mostrar serviços próximos ao seu bairro, podemos usar sua localização aproximada. Você também pode informar sua cidade ou CEP manualmente.

Status Aguardando ação do usuário
Latitude Será exibida após permissão
Longitude Será exibida após permissão
  • Explique o motivo antes do pedido.
  • Peça localização apenas após ação do usuário.
  • Ofereça alternativa manual com cidade ou CEP.
  • Não bloqueie o site se o usuário negar.
  • Não armazene coordenadas sem aviso e consentimento.
  • Não peça alta precisão se cidade ou bairro bastam.
  • Informe que a permissão é opcional.
  • Use HTTPS em projetos reais.
Desafio Mestre

Página de Localização Web com Consentimento

Missão: criar o arquivo geolocalizacao-web-consentimento.html provando domínio da API, tratamento de erros, privacidade, consentimento e alternativa manual.

Requisitos obrigatórios

  • Arquivo geolocalizacao-web-consentimento.html.
  • Doctype HTML5 e html lang="pt-BR".
  • Head completo com charset, viewport, title e meta description.
  • Body com header, nav, main, section, article, aside e footer.
  • H1 com “Página de Localização Web com Consentimento”.
  • Section introdutória explicando a função da Geolocation API.
  • Nav interno com links para pelo menos 4 seções.
  • Pelo menos 4 sections com h2.
  • Explicação clara de que geolocalização depende de permissão do usuário.
  • Interface com botão “Usar minha localização”.
  • Interface com botão “Parar rastreamento”.
  • Alternativa manual com campo para cidade ou CEP.
  • Bloco para exibir status da permissão.
  • Bloco para exibir latitude, longitude e accuracy.
  • Explicação clara de latitude, longitude e accuracy.
  • Exemplo conceitual usando navigator.geolocation.
  • Exemplo conceitual usando getCurrentPosition.
  • Exemplo conceitual usando watchPosition e clearWatch.
  • Tratamento de erro para permissão negada, timeout e indisponibilidade.
  • Lista com pelo menos 12 boas práticas para geolocalização.
  • Checklist de privacidade e consentimento.
  • Footer com nome do aluno, ano e link para voltar ao topo.
Erros que reprovam:
  • Solicitar localização no carregamento da página sem contexto.
  • Não tratar permissão negada.
  • Não oferecer campo manual para CEP ou cidade.
  • Deixar watchPosition ativo sem botão para parar.
  • Prometer precisão absoluta ignorando accuracy.
  • Armazenar localização sem aviso.
Quiz com gabarito

15 perguntas para provar domínio

  1. Qual objeto contém a API? navigator.geolocation.
  2. Qual método pega a posição uma única vez? getCurrentPosition.
  3. Qual método rastreia movimento? watchPosition.
  4. Como parar rastreamento? clearWatch(id).
  5. O usuário precisa permitir acesso? Sim.
  6. O que é latitude? Posição norte-sul.
  7. O que é longitude? Posição leste-oeste.
  8. O que accuracy informa? Precisão em metros.
  9. A API funciona em HTTP comum? Não em contexto real seguro; exige HTTPS ou localhost.
  10. O que é timestamp? Momento da captura da posição.
  11. Qual opção ativa alta precisão? enableHighAccuracy: true.
  12. O que timeout faz? Define tempo máximo de espera.
  13. O que maximumAge faz? Aceita posição em cache por certo tempo.
  14. Geolocalização é HTML ou JS? É uma API JavaScript do navegador.
  15. A precisão é sempre igual? Não, depende da fonte de localização.
GitHub

Registre sua página de geolocalização

git status
git add .
git commit -m "aula-36: cria pagina de geolocalizacao com consentimento"
git push
  • git status: verifica a criação do desafio.
  • git add .: prepara o arquivo.
  • git commit: documenta o domínio da API.
  • git push: envia para seu portfólio remoto.
Resumo Mestre

Geolocalização é contexto com confiança

Use a Geolocation API para servir o usuário, não para rastreá-lo sem motivo. Explique, peça permissão, trate falhas, ofereça alternativa manual, economize bateria e respeite a privacidade.

Nota final: 10/10 Supremo.

Esta aula está no nível Mestre dos Mestres porque une engenharia da API, tratamento de erro, experiência do usuário, consentimento, privacidade e responsabilidade real em projetos modernos.