fix: geolocalización GPS corregida con fallback por coordenadas
This commit is contained in:
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user