fix: geolocalización GPS corregida con fallback por coordenadas

This commit is contained in:
2026-05-23 03:54:05 -06:00
parent 8296839ec7
commit e69fb36c49
4 changed files with 43 additions and 8 deletions

View File

@@ -7,8 +7,13 @@ import * as Location from 'expo-location';
const API_URL = 'http://10.137.112.65:8000';
const COLONIAS = [
'Zona Centro', 'Las Arboledas', 'Trojes', 'San Juanico',
'Los Olivos', 'Rancho Seco', 'Las Insurgentes'
'Zona Centro', 'Las Arboledas', 'Sector Norte - Av. Tecnológico',
'San Juanico', 'Los Olivos', 'Rancho Seco',
'Norte Extremo - Rumbos de Roque', 'Nororiente - Ciudad Industrial',
'Suroriente - Universidad Latina', 'Poniente - Hospital General',
'Eje Juan Pablo II - Sede UG Sur', 'Zona de Oro - Torres Landa',
'Las Insurgentes', 'Trojes',
'Sur Poniente - La Toscana', 'Norponiente - San José de Celaya'
];
export default function App() {
@@ -34,6 +39,8 @@ export default function App() {
});
const [alertaOperativa, setAlertaOperativa] = useState(null);
const [localizando, setLocalizando] = useState(false);
const [latGPS, setLatGPS] = useState(20.5185);
const [lngGPS, setLngGPS] = useState(-100.8450);
useEffect(() => {
cargarSesion();
@@ -170,7 +177,7 @@ export default function App() {
const res = await fetch(`${API_URL}/domicilios`, {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` },
body: JSON.stringify({ direccion, colonia: coloniaSeleccionada, lat: 20.5185, lng: -100.8450 }),
body: JSON.stringify({ direccion, colonia: coloniaSeleccionada, lat: latGPS, lng: lngGPS }),
});
const data = await res.json();
if (data.id) {
@@ -178,6 +185,7 @@ export default function App() {
setDomicilioActivo(data);
await cargarDomicilios(token);
setDireccion(''); setColoniaSeleccionada(''); setCodigoPostal('');
setLatGPS(20.5185); setLngGPS(-100.8450);
setScreen('eta');
consultarETA(data.id, token);
} else { Alert.alert('Error', data.detail || 'Colonia no encontrada'); }
@@ -267,12 +275,25 @@ export default function App() {
try {
const { status } = await Location.requestForegroundPermissionsAsync();
if (status !== 'granted') {
Alert.alert('Permiso denegado', 'Necesitamos acceso a tu ubicación para encontrar tu zona de recolección');
Alert.alert('Permiso denegado', 'Necesitamos acceso a tu ubicación');
setLocalizando(false);
return;
}
const location = await Location.getCurrentPositionAsync({ accuracy: Location.Accuracy.High });
const location = await Location.getCurrentPositionAsync({
accuracy: Location.Accuracy.Balanced,
});
const { latitude, longitude } = location.coords;
setLatGPS(latitude);
setLngGPS(longitude);
const geocode = await Location.reverseGeocodeAsync({ latitude, longitude });
if (geocode.length > 0) {
const lugar = geocode[0];
const dirAuto = `${lugar.street || ''} ${lugar.streetNumber || ''}`.trim();
const cpAuto = lugar.postalCode || '';
if (dirAuto) setDireccion(dirAuto);
if (cpAuto) setCodigoPostal(cpAuto);
}
const res = await fetch(
`${API_URL}/domicilios/ruta-por-coordenadas?lat=${latitude}&lng=${longitude}`,
@@ -283,10 +304,10 @@ export default function App() {
setColoniaSeleccionada(data.colonia_sugerida);
Alert.alert(
'📍 Ubicación detectada',
`Se detectó tu zona: ${data.colonia_sugerida}\nRuta: ${data.nombre_ruta}\nDistancia: ${data.distancia_metros}m`
`Zona: ${data.colonia_sugerida}\nRuta: ${data.nombre_ruta}\nDistancia: ${data.distancia_metros}m`
);
} else {
Alert.alert('Sin cobertura', 'Tu ubicación no está dentro de las zonas de servicio de Celaya');
Alert.alert('Sin cobertura', 'Tu ubicación no está dentro de las zonas de Celaya');
}
} catch {
Alert.alert('Error', 'No se pudo obtener tu ubicación');