📍 Cap 15: PokeMap: Onde estão os Treinadores?
🎯 Objetivo da Aula: Ao final desta aula, você entenderá como o GPS do celular funciona. Você aprenderá a capturar sua localização atual (Latitude e Longitude) e mostrar um mapa interativo do Google no seu aplicativo.
🏢 O Cenário Prático (Seu Desafio): Você está criando o PokeMap. O desafio é mostrar no mapa onde existem “Ginásios Pokémon” na sua cidade. Para isso, o app precisa saber onde você está agora para calcular a distância até o ginásio mais próximo.
🧠 Fundamentos: A Teoria Traduzida
📖 Dicionário do Programador
- Latitude e Longitude: São os “endereços” matemáticos de qualquer lugar do planeta.
- Latitude: Norte/Sul.
- Longitude: Leste/Oeste.
- GPS: Sistema de satélites que diz ao celular exatamente onde ele está.
- Google Maps SDK: É a biblioteca que traz o mapa real do Google para dentro do seu app.
🎨 Padrão de Mapas
No Compose, usamos o componente GoogleMap. Para marcar um lugar específico, usamos um Marker (Pino).
graph LR A[Satélite] --> B[Celular: Lat -23, Long -46] B --> C{Mapa Google} C --> D[Você está aqui!]
🏗️ Construindo o Projeto (Checklist Studio)
Para o mapa funcionar, você precisará de duas coisas:
- Permissão de Localização: Adicione
ACCESS_FINE_LOCATIONno seu Manifesto. - API Key: Uma chave secreta que você gera no Google Cloud para o mapa abrir.
📖 Exemplo Passo a Passo: Colocando o Marcador
@Composable
fun MapaGinasio() {
val localGinasio = LatLng(-23.5505, -46.6333) // Coordenadas de exemplo
GoogleMap(modifier = Modifier.fillMaxSize()) {
// Colocando o pino no mapa
Marker(
state = MarkerState(position = localGinasio),
title = "Ginásio Master",
snippet = "Batalha de Nível 20"
)
}
}🛠️ Prática Obrigatória 1: Pesquise e anote as coordenadas de Latitude e Longitude de um lugar famoso na sua cidade ou no mundo (ex: Estátua da Liberdade).
🛠️ Prática Obrigatória 2:
Crie uma função chamada checarProximidade. Ela recebe a sua Latitude (Double) e a Latitude do Ginásio (Double). Se a diferença for menor que 0.001, o retorno deve ser "Você chegou ao Ginásio!".
🔑 Gabarito Passo a Passo:
fun checarProximidade(minhaLat: Double, ginasioLat: Double): String {
val diferenca = Math.abs(minhaLat - ginasioLat)
return if (diferenca < 0.001) {
"Você chegou ao Ginásio!"
} else {
"Continue andando..."
}
}📤 Instruções de Entrega (Microsoft Teams):
- Envie as coordenadas que você pesquisou.
- Envie o código da função de proximidade.
- Submeta no canal de tarefas.