diff --git a/frontend/src/views/MapView.vue b/frontend/src/views/MapView.vue index 8c3d542..08d684e 100644 --- a/frontend/src/views/MapView.vue +++ b/frontend/src/views/MapView.vue @@ -568,6 +568,10 @@ async function highlightOptimalStopForRoute() { } catch (e) { console.warn('馃 JARVIS: Fall贸 la geolocalizaci贸n autom谩tica:', e); } + } else { + // Si ya tenemos coordenadas, nos aseguramos de que el marcador est茅 dibujado + // ya que el flujo principal (limpiarMapa) lo borra. + reDrawUserMarker(); } if (!userCoords.value || routeStore.selectedRouteStops.length === 0) { @@ -589,11 +593,20 @@ async function highlightOptimalStopForRoute() { const stopObj = paradaCercana.value as BusStop; console.log(`馃 JARVIS: Parada 贸ptima detectada: ${stopObj.name}`); - // Restaurar centrado y zoom en la parada 贸ptima para que el usuario la vea claramente - setCenter(stopObj.latitude, stopObj.longitude); - setZoom(17); // Zoom m谩s cercano para ver la parada y alrededores + // PASO 0: Asegurar que el usuario y la parada 贸ptima sean visibles al mismo tiempo + const bounds = new google.maps.LatLngBounds(); + bounds.extend(new google.maps.LatLng(userCoords.value.lat, userCoords.value.lng)); + bounds.extend(new google.maps.LatLng(stopObj.latitude, stopObj.longitude)); + + // Aplicar zoom inteligente con padding para no cortar los marcadores + map.value?.fitBounds(bounds, { + top: 100, // espacio para el buscador/navbar + bottom: 250, // espacio para el ETACard que saldr谩 luego + left: 80, + right: 80 + }); - // A帽adir el PULSO NARANJA + // A帽adir el PULSO NARANJA (Parada) if (optimalStopPulse.value && typeof optimalStopPulse.value.setMap === 'function') { optimalStopPulse.value.setMap(null); // Clear listeners for the old pulse marker