5.8 KiB
5.8 KiB
Implementação de Rota Motorista → Entrega
Funcionalidade Implementada
Agora o sistema traça a rota corretamente da posição atual do motorista até o endereço de entrega, em vez de apenas mostrar o destino.
Principais Melhorias
1. Obtenção da Localização Atual do Motorista
- Função
getDriverCurrentLocation(): Obtém a localização atual com alta precisão - Verificação de Permissões: Solicita permissão de localização se necessário
- Verificação de GPS: Confirma se o serviço de localização está ativo
- Tratamento de Erros: Alertas informativos para problemas de localização
const getDriverCurrentLocation = async (): Promise<{ latitude: number; longitude: number } | null> => {
// Verificar permissões
const { status } = await Location.requestForegroundPermissionsAsync()
// Verificar se GPS está ativo
const isLocationEnabled = await Location.hasServicesEnabledAsync()
// Obter localização com alta precisão
const location = await Location.getCurrentPositionAsync({
accuracy: Location.Accuracy.High,
})
return {
latitude: location.coords.latitude,
longitude: location.coords.longitude,
}
}
2. URLs de Navegação com Origem e Destino
- Google Maps: URLs com formato
dir/origem/destino - Waze: URLs com coordenadas de origem e destino
- Fallback: URLs apenas com destino se origem não estiver disponível
// Google Maps com rota completa
`https://www.google.com/maps/dir/${originLat},${originLng}/${encodedAddress}`
`https://www.google.com/maps/dir/${originLat},${originLng}/${destinationLat},${destinationLng}`
// Waze com coordenadas
`waze://?ll=${destinationLat},${destinationLng}&navigate=yes`
3. Interface Visual Melhorada
- Indicador GPS: Mostra quando a localização do motorista está disponível
- Botão Inteligente: Muda de "Localizar" para "Navegar" conforme o estado
- Loading State: Indica quando está obtendo a localização
<Text style={styles.actionButtonText}>
{locationLoading ? "..." : driverLocation ? "Navegar" : "Localizar"}
</Text>
{driverLocation && (
<View style={styles.locationIndicator}>
<Ionicons name="location" size={12} color={STATUS_COLORS.completed.primary} />
<Text style={styles.locationText}>GPS Ativo</Text>
</View>
)}
4. Integração com DeliveryMap
- Propriedade
driverLocation: Passa a localização do motorista para o mapa - Rota Visual: O mapa pode mostrar a rota da posição atual até a entrega
- Marcador do Motorista: Indica a posição atual no mapa
<DeliveryMap
deliveries={[delivery]}
showRoute={true}
centerOnUser={true}
showDeliveryPin={true}
driverLocation={driverLocation}
/>
Fluxo de Funcionamento
1. Primeiro Acesso
- Usuário clica em "Localizar"
- Sistema solicita permissão de localização
- Obtém coordenadas atuais do motorista
- Botão muda para "Navegar"
2. Navegação
- Usuário clica em "Navegar"
- Sistema usa localização atual como origem
- Gera URLs com rota completa (origem → destino)
- Abre app de navegação com rota traçada
3. Fallback
- Se não conseguir localização atual
- Usa coordenadas padrão como origem
- Ainda funciona, mas sem precisão da posição real
Logs de Debug
O sistema gera logs detalhados para debug:
=== DEBUG: OBTENDO LOCALIZAÇÃO DO MOTORISTA ===
✅ Localização obtida: { latitude: -1.4624, longitude: -48.4787 }
=== DEBUG: ABRINDO NAVEGAÇÃO ===
App: google
Endereço: Rua das Flores, 123, Centro, Belém, PA
Origem (motorista): { latitude: -1.4624, longitude: -48.4787 }
Destino (entrega): { latitude: -1.4625, longitude: -48.4788 }
URLs para tentar: [
"https://www.google.com/maps/dir/-1.4624,-48.4787/Rua%20das%20Flores%2C%20123%2C%20Centro%2C%20Belém%2C%20PA",
"https://www.google.com/maps/dir/-1.4624,-48.4787/-1.4625,-48.4788"
]
Compatibilidade
✅ Plataformas Suportadas
- Android: Google Maps, Waze
- iOS: Google Maps, Waze, Apple Maps
- Expo SDK 53: Compatível
✅ Apps de Navegação
- Google Maps: Rota completa com origem e destino
- Waze: Navegação com coordenadas precisas
- Apple Maps: Suporte nativo no iOS
✅ Estados de Localização
- GPS Ativo: Rota precisa da posição atual
- GPS Inativo: Fallback para coordenadas padrão
- Sem Permissão: Solicita permissão automaticamente
Benefícios
🎯 Precisão
- Rota traçada da posição real do motorista
- Não depende de coordenadas fixas ou estimadas
🚀 Experiência do Usuário
- Interface intuitiva com indicadores visuais
- Feedback imediato sobre status do GPS
- Botões contextuais (Localizar/Navegar)
🔧 Robustez
- Múltiplas URLs de fallback
- Tratamento de erros de localização
- Funciona mesmo sem GPS ativo
📱 Integração
- Compatível com todos os apps de navegação
- Suporte para Android e iOS
- Logs detalhados para debug
Como Testar
1. Teste de Localização
# Build de produção
npx expo run:android --variant release
2. Cenários de Teste
- GPS Ativo: Deve mostrar "GPS Ativo" e traçar rota precisa
- GPS Inativo: Deve solicitar ativação do GPS
- Sem Permissão: Deve solicitar permissão de localização
- Apps de Navegação: Deve abrir com rota origem → destino
3. Verificação de Logs
- Verificar logs no console para confirmar localização obtida
- Confirmar URLs geradas com origem e destino
- Validar funcionamento dos apps de navegação
Próximos Passos
🔮 Melhorias Futuras
- Rota em Tempo Real: Atualizar rota conforme motorista se move
- Estimativa de Tempo: Calcular tempo estimado de chegada
- Histórico de Rotas: Salvar rotas percorridas
- Otimização: Sugerir rotas alternativas