La API Geolocation del W3C estandariza el acceso de los navegadores web al hardware de posicionamiento en teléfonos móviles, tabletas y ordenadores.
Disponible a través del objeto global de JavaScript navigator.geolocation, esta interfaz permite a aplicaciones web solicitar coordenadas geográficas de forma segura y con el consentimiento explícito del usuario. En esta guía detallamos su implementación técnica y mejores prácticas.
Inspeccione la Respuesta Geolocation de su Navegador
Ejecute una llamada a navigator.geolocation para visualizar los objetos de coordenadas, velocidad, rumbo, altitud y marca de tiempo en directo.
1. Arquitectura Central y Métodos de la API
La especificación Geolocation del W3C define tres métodos principales:
navigator.geolocation.getCurrentPosition(success, error, options)
Solicita una captura puntual de la posición física del usuario. Retorna un objeto GeolocationPosition en caso de éxito o GeolocationPositionError si se produce un fallo.
navigator.geolocation.watchPosition(success, error, options)
Registra una función de escucha que se ejecuta automáticamente cuando el dispositivo cambia de posición. Devuelve un identificador watchId para rastreo continuo.
navigator.geolocation.clearWatch(watchId)
Cancela la escucha de posición activa registrada mediante watchPosition(), ahorrando batería y desactivando los sensores del dispositivo.
2. Implementación de JavaScript Lista para Producción
A continuación presentamos un fragmento de código robusto para producción con control de tiempo de espera, gestión de errores y máxima precisión:
// Check browser support
if ('geolocation' in navigator) {
const options = {
enableHighAccuracy: true, // Request GPS hardware rather than IP lookup
timeout: 10000, // Maximum wait time of 10 seconds
maximumAge: 0 // Do not return cached coordinates
};
function successCallback(position) {
const { latitude, longitude, accuracy, altitude, heading, speed } = position.coords;
console.log(`Latitude: ${latitude}, Longitude: ${longitude}`);
console.log(`Accuracy radius: ${accuracy} meters`);
}
function errorCallback(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
console.error("User denied Geolocation permission.");
break;
case error.POSITION_UNAVAILABLE:
console.error("Location information is unavailable (weak GPS/Wi-Fi signal).");
break;
case error.TIMEOUT:
console.error("The request to get user location timed out.");
break;
}
}
navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options);
} else {
console.warn("Geolocation API is not supported in this browser.");
}3. Opciones de Configuración Clave: PositionOptions
| Propiedad | Tipo | Por Defecto | Comportamiento e Impacto Técnico |
|---|---|---|---|
enableHighAccuracy | Boolean | false | Si es true, indica al navegador que active el receptor GNSS/GPS interno (precisión < 3-5 metros). Si es false, recurre a Wi-Fi o triangulación celular de bajo consumo. |
timeout | Positive integer (ms) | Infinity | Tiempo máximo en milisegundos que el navegador esperará antes de emitir un error TIMEOUT. Valor recomendado: de 8.000 a 12.000 ms. |
maximumAge | Positive integer (ms) | 0 | Edad máxima admisible de una posición en caché. Asignar 0 obliga a obtener una lectura fresca de satélites o Wi-Fi. |
4. Requisitos de Seguridad y Políticas de Permisos
- Contexto Seguro Obligatorio (HTTPS): Desde Chrome 50 e iOS 10, la API de geolocalización está deshabilitada en conexiones no seguras HTTP. Requiere TLS/HTTPS.
- Interacción del Usuario Requerida: Disparar la solicitud tras pulsar un botón ('Obtener Ubicación') incrementa notablemente la tasa de aceptación frente a avisos automáticos.
- Directivas de Iframe: Si inserta herramientas de geolocalización dentro de un <iframe>, debe declarar el atributo allow='geolocation'.
Convierta los Grados Decimales de la API
Transforme los valores decimales de navigator.geolocation a Grados Minutos Segundos (DMS) o Universal Transverse Mercator (UTM).