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.

💻 Prueba de API en Vivo

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:

1

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.

2

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.

3

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

PropiedadTipoPor DefectoComportamiento e Impacto Técnico
enableHighAccuracyBooleanfalseSi 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.
timeoutPositive integer (ms)InfinityTiempo máximo en milisegundos que el navegador esperará antes de emitir un error TIMEOUT. Valor recomendado: de 8.000 a 12.000 ms.
maximumAgePositive integer (ms)0Edad 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'.
🧭 Conversión de Coordenadas

Convierta los Grados Decimales de la API

Transforme los valores decimales de navigator.geolocation a Grados Minutos Segundos (DMS) o Universal Transverse Mercator (UTM).