Command Palette

Search for a command to run...

Geolocation API: Obtener la Ubicación del Usuario en JavaScript

Aprende a usar la API Geolocation del navegador para obtener coordenadas GPS, calcular distancias y crear aplicaciones basadas en ubicación con JavaScript vanilla.

Lectura: 12 min
Nivel: Intermedio

TL;DR - Resumen rápido

  • La API Geolocation está disponible en el objeto navigator.geolocation
  • Requiere permiso explícito del usuario antes de acceder a la ubicación
  • getCurrentPosition() obtiene la ubicación una sola vez
  • watchPosition() monitorea cambios en la ubicación en tiempo real
  • El objeto Position contiene coordenadas (latitude, longitude) y precisión (accuracy)

Introducción a la API Geolocation

La API Geolocation es una de las APIs más potentes disponibles en los navegadores modernos, permitiendo a las aplicaciones web acceder a la ubicación geográfica del usuario. Esta capacidad abre un mundo de posibilidades para crear experiencias personalizadas basadas en la posición física del usuario, desde aplicaciones de entrega hasta redes sociales basadas en proximidad.

La API funciona utilizando múltiples fuentes de información para determinar la ubicación: GPS del dispositivo, dirección IP, Wi-Fi, triangulación de torres de celular y otros sensores del dispositivo. El navegador selecciona automáticamente la fuente más precisa disponible según el contexto.

  • Aplicaciones de <strong>delivery y transporte</strong> para rastrear envíos
  • Redes sociales para mostrar contenido <strong>basado en ubicación</strong>
  • Aplicaciones de <strong>meteorología local</strong> y pronósticos
  • Sistemas de <strong>mapas y navegación</strong> personalizados
  • Servicios de <strong>geocercas</strong> y alertas de proximidad

Requisitos de HTTPS

La API Geolocation solo funciona en contextos seguros (HTTPS) o en localhost. Esto es una medida de seguridad para proteger la privacidad del usuario. Si intentas usar la API en HTTP, el navegador bloqueará el acceso a la ubicación.

Obtener la Ubicación Actual

El método principal para obtener la ubicación es getCurrentPosition(), que solicita la ubicación del usuario una sola vez. Este método es asíncrono y utiliza callbacks para manejar el resultado: una función de éxito y otra opcional para manejar errores.

Uso Básico de getCurrentPosition

El método getCurrentPosition() acepta hasta tres parámetros: una función de éxito (obligatoria), una función de error (opcional) y un objeto de opciones (opcional). La función de éxito recibe un objeto Positionque contiene las coordenadas y metadatos.

obtener-ubicacion.js
Loading code...

Este código muestra cómo obtener la ubicación básica del usuario. Cuando el usuario concede el permiso, la API devuelve las coordenadas de latitud y longitud, junto con la precisión estimada en metros. La precisión es crucial porque indica el radio de incertidumbre alrededor de las coordenadas reportadas.

Primera solicitud de permiso

La primera vez que solicitas la ubicación, el navegador mostrará un diálogo de permiso al usuario. Si el usuario deniega el permiso, no podrás volver a solicitarlo automáticamente. El usuario debe cambiar la configuración del sitio en la barra de direcciones del navegador.

Datos Disponibles en el Objeto Position

El objeto Position contiene dos propiedades principales: coordsy timestamp. La propiedad coords es un objeto Coordinatescon información detallada sobre la ubicación y precisión.

datos-posicion.js
Loading code...

Este ejemplo muestra todos los datos disponibles en el objeto de posición. Además de las coordenadas básicas, puedes obtener la altitud, velocidad y dirección del movimiento. Sin embargo, ten en cuenta que no todos los dispositivos pueden proporcionar todos estos datos, especialmente la altitud y la velocidad.

Datos opcionales

Propiedades como altitude, altitudeAccuracy, headingy speed pueden ser null si el dispositivo no puede determinarlas. Siempre verifica que estos valores no sean null antes de usarlos en tu aplicación.

Opciones de Configuración

El tercer parámetro de getCurrentPosition() es un objeto de opciones que te permite controlar el comportamiento de la API. Estas opciones incluyen la precisión deseada, el tiempo máximo de espera y la antigüedad máxima aceptable de la posición.

Configuración de Opciones

Las opciones disponibles te permiten equilibrar entre precisión y rendimiento. Por ejemplo, para una aplicación de mapas necesitas alta precisión, pero para detectar el país del usuario, una precisión baja es suficiente y consume menos batería.

opciones-configuracion.js
Loading code...

Este ejemplo muestra cómo configurar la API con opciones específicas. La opciónenableHighAccuracy solicita la mejor precisión posible (generalmente GPS), pero consume más batería. timeout establece cuánto tiempo esperar antes de fallar, y maximumAge permite usar una posición cacheada si es reciente.

Optimización de batería y rendimiento

Para aplicaciones que no requieren alta precisión, usa enableHighAccuracy: false. Esto reduce significativamente el consumo de batería. El seguimiento continuo conwatchPosition() consume aún más batería, especialmente con alta precisión. Siempre usa clearWatch() cuando ya no necesites el seguimiento.

Seguimiento de Posición en Tiempo Real

Para aplicaciones que necesitan monitorear cambios en la ubicación, como aplicaciones de navegación o rastreo de actividad física, la API proporciona el métodowatchPosition(). Este método funciona de manera similar agetCurrentPosition(), pero llama a la función de éxito cada vez que la ubicación cambia.

Uso de watchPosition

El método watchPosition() devuelve un identificador que puedes usar para detener el seguimiento con clearWatch(). Es importante siempre detener el seguimiento cuando ya no lo necesites para evitar consumir batería innecesariamente.

watch-position.js
Loading code...

Este código muestra cómo monitorear cambios en la ubicación del usuario. Cada vez que el dispositivo detecta un cambio significativo en la posición, la función de éxito se ejecuta con las nuevas coordenadas. El identificador devuelto porwatchPosition() es esencial para poder detener el seguimiento cuando ya no sea necesario.

Detener el Seguimiento

El método clearWatch() detiene el seguimiento de ubicación iniciado con watchPosition(). Es crucial implementar una limpieza adecuada para evitar fugas de recursos y consumo innecesario de batería.

clear-watch.js
Loading code...

Este ejemplo muestra cómo detener el seguimiento de ubicación cuando el usuario abandona la página. Usar el evento beforeunload asegura que el seguimiento se detenga incluso si el usuario cierra la pestaña directamente.

Errores Comunes y Manejo de Excepciones

La API Geolocation puede fallar por múltiples razones: el usuario deniega el permiso, el dispositivo no tiene GPS, el tiempo de espera se excede o hay problemas técnicos. Manejar estos errores correctamente es fundamental para proporcionar una buena experiencia de usuario.

Códigos de Error y Sus Significados

La función de error recibe un objeto PositionError con dos propiedades:code (un número que indica el tipo de error) y message(una descripción legible del error). Hay cuatro códigos de error posibles.

errores-comunes.js
Loading code...

Este código muestra cómo manejar los diferentes tipos de errores que pueden ocurrir al usar la API Geolocation. Cada código de error requiere una respuesta diferente: para permiso denegado, podrías mostrar un mensaje explicando por qué necesitas la ubicación; para timeout, podrías intentar nuevamente con opciones diferentes.

  • <strong>PERMISSION_DENIED (1)</strong>: Usuario denegó el permiso de ubicación
  • <strong>POSITION_UNAVAILABLE (2)</strong>: No se pudo determinar la ubicación
  • <strong>TIMEOUT (3)</strong>: Tiempo de espera excedido al obtener la ubicación
  • <strong>UNKNOWN_ERROR (0)</strong>: Error desconocido en la API

Compatibilidad con navegadores

Antes de usar la API Geolocation, verifica que el navegador la soporte usando"geolocation" in navigator. Algunos navegadores antiguos o ciertos contextos (como iframes de terceros) pueden no tener acceso a esta API.

Verificación de Compatibilidad

Aunque la API Geolocation tiene excelente soporte en navegadores modernos, siempre es una buena práctica verificar su disponibilidad antes de usarla. Esto evita errores en navegadores que no la soportan.

verificacion-compatibilidad.js
Loading code...

Este patrón de verificación de compatibilidad es una práctica recomendada para todas las APIs del navegador. Verificar la disponibilidad antes de usar la API permite proporcionar una experiencia alternativa o un mensaje informativo a los usuarios con navegadores antiguos.

Resumen: Geolocation API

Conceptos principales:

  • La API Geolocation está disponible en navigator.geolocation
  • getCurrentPosition() obtiene la ubicación una sola vez
  • watchPosition() monitorea cambios en la ubicación continuamente
  • clearWatch() detiene el seguimiento de ubicación activo
  • El objeto Position contiene coords y timestamp

Mejores prácticas:

  • Siempre verifica la compatibilidad antes de usar la API
  • Maneja todos los códigos de error posibles
  • Usa enableHighAccuracy solo cuando sea necesario
  • Siempre detén watchPosition cuando ya no se necesite
  • Proporciona una experiencia alternativa sin ubicación