📍 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:

  1. Permissão de Localização: Adicione ACCESS_FINE_LOCATION no seu Manifesto.
  2. 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):

  1. Envie as coordenadas que você pesquisou.
  2. Envie o código da função de proximidade.
  3. Submeta no canal de tarefas.

Capitulo Anterior | Proximo Capitulo