// This function will be called by the button's onclick event in Shiny function sendLocationToShiny() { // Check if Geolocation is supported if (navigator.geolocation) { // Set a status message while we wait for user permission Shiny.setInputValue("geolocation_status", "Esperando permiso del usuario..."); navigator.geolocation.getCurrentPosition(showPosition, showError, { enableHighAccuracy: true, timeout: 10000, // 10 segundos de tiempo de espera maximumAge: 0 // No usar una ubicación en caché }); } else { // Handle case where geolocation is not supported Shiny.setInputValue("geolocation_status", "La geolocalización no es soportada por este navegador."); } } function showPosition(position) { const coords = { lat: position.coords.latitude, lon: position.coords.longitude, accuracy: position.coords.accuracy, timestamp: new Date(position.timestamp).toISOString() }; // Send the coordinates object to the Shiny server Shiny.setInputValue("geolocation_data", coords, {priority: "event"}); Shiny.setInputValue("geolocation_status", "Ubicación recibida exitosamente."); } function showError(error) { let errorMessage; switch(error.code) { case error.PERMISSION_DENIED: errorMessage = "El usuario denegó la solicitud de geolocalización."; break; case error.POSITION_UNAVAILABLE: errorMessage = "La información de la ubicación no está disponible."; break; case error.TIMEOUT: errorMessage = "La solicitud para obtener la ubicación del usuario ha caducado."; break; case error.UNKNOWN_ERROR: errorMessage = "Ocurrió un error desconocido."; break; } // Send the error message to the Shiny server Shiny.setInputValue("geolocation_status", "Error: " + errorMessage); Shiny.setInputValue("geolocation_data", null); // Clear data on error }