Cómo implementar Geolocalización en JavaScript

26/11/2024 | HTML, JavaScript | 0 comentarios

La API de Geolocalización te permite obtener la ubicación del usuario. Aprende a usarla en JavaScript con este tutorial.

Descargar archivos


La geolocalización es una funcionalidad para determinar la ubicación geográfica de un usuario. Es posible usar JavaScript para obtener la ubicación para mostrar mapas, recomendaciones locales entre otros.

API de Geolocalización

La API de Geolocalización es una interfaz que permite acceder a la ubicación del usuario usando tecnologías como GPS, Wi-Fi y dirección IP. Se accede llamando a la propiedad navigator.geolocation. Por motivos de seguridad para acceder a la información de ubicación, se solicita permiso al usuario.

Métodos disponibles

  • getCurrentPosition(): obtiene la ubicación actual del usuario.
  • watchPosition(): crea un listener para obtener cualquier cambio de ubicación.
  • clearWatch(): elimina el listener que detecta los cambios de ubicación.

Ubicación del usuario

Para obtener la ubicación del usuario se usa el método getCurrentPosition():


navigator.geolocation.getCurrentPosition(success, error, options)

Donde los parámetros son:

  • success: Una función callback que maneja la posición obtenida.
  • error: Una función callback que maneja posibles errores.
  • options: Un objeto (opcional) con configuraciones adicionales:

Ejemplo:


navigator.geolocation.getCurrentPosition(
    (position) => {
        // success
        console.log(position.coords);
        console.log("Latitud:", position.coords.latitude);
        console.log("Longitud:", position.coords.longitude); 
    },
    (error) => {
        // error
        console.error("Error en la geolocalización:", error.message);
    }
);

Con lo cual obtenemos el siguiente resultado:

Ubicación en tiempo real

Si necesitas actualizar la posición de forma continua, usa watchPosition():


navigator.geolocation.watchPosition(success, error, options)

Ejemplo:


const watchId = navigator.geolocation.watchPosition(
    (position) => {
        // success
        console.log("Latitud:", position.coords.latitude);
        console.log("Longitud:", position.coords.longitude);
    },
    (error) => {
        // error
       console.error("Error en la geolocalización:", error.message);
    },
    {
        enableHighAccuracy: true
    }
);

// Para detener el rastreo:
navigator.geolocation.clearWatch(watchId);

Manejo de errores

Si falla la geolocalización los códigos de error disponibles son:

  • PERMISSION_DENIED: El usuario no permitió el acceso a la ubicación.
  • POSITION_UNAVAILABLE: El dispositivo no puede determinar la ubicación.
  • TIMEOUT: La solicitud superó el tiempo de espera.

Ejemplo


function handleError(error) {
    switch (error.code) {
        case error.PERMISSION_DENIED:
            console.error("Permiso denegado.");
            break;
        case error.POSITION_UNAVAILABLE:
            console.error("Ubicación no disponible.");
            break;
        case error.TIMEOUT:
            console.error("La solicitud expiró.");
            break;
        default:
            console.error("Error desconocido.");
    }
}

Ejemplo práctico

Vamoa a mostrar la ubicación del usuario en el mapa con el API de Google Maps.

1.- Preparar el Mapa

Lo primero es incluir un mapa con el API de Google Maps, inicialmente se mostrará todo el mundo centrado en (0, 0) y con un zoom de 2.

Notar que API_KEY es tu llave para usar Google Maps, si deseas conocer más sobre como usar el API de Google Maps puedes leer: Cómo integrar y personalizar Google Maps en tu Sitio Web.


<div id="map"></div>
<script>
    let map, marker;
    async function initMap() {
        const { Map } = await google.maps.importLibrary("maps");
        const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");

        map = new Map(document.getElementById("map"), {
            zoom: 2,
            center: { lat: 0, lng: 0 },
            mapId: "custom-map-id",
        });

        marker = new AdvancedMarkerElement({
            map,
            title: "Tu ubicación"
        });
    }
</script>
<script
  src="https://maps.googleapis.com/maps/api/js?key=API_KEY&loading=async&callback=initMap" defer>
</script>

Lo siguiente es agregar un botón para que el usuario active la geolocalización, luego centramos y hacemos zoom el mapa con la ubicación del usuario:


<button id="btLocateOnMap">Ubicarme en el Mapa</button>
<script>
    let btLocateOnMap = document.getElementById('btLocateOnMap');
    btLocateOnMap.addEventListener('click', () => {
        navigator.geolocation.getCurrentPosition(
            (position) => {
                const userLocation = {
                    lat: position.coords.latitude,
                    lng: position.coords.longitude,
                };

                // center map on user location
                map.setZoom(15);
                map.setCenter(userLocation);
                marker.position = userLocation;
            },
            (error) => {
                console.error("Error en la geolocalización:", error.message);
            }
        );
    });
</script>

Uniendo todo el código obtenemos el script para mostrar la ubicación del usuario usando la geolocalización.


<html>
<head>
  <title>Geolocalización</title>
  <style>#map { height: 420px; width: 640px; }</style>
</head>
<body>

<h3>Mapa de Ubicación</h3>
<button id="btLocateOnMap">Ubicarme en el Mapa</button>

<div id="map"></div>

<script>
    // inicializar mapa
    let map, marker;
    async function initMap() {
        const { Map } = await google.maps.importLibrary("maps");
        const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");

        map = new Map(document.getElementById("map"), {
            zoom: 2,
            center: { lat: 0, lng: 0 },
            mapId: "custom-map-id",
        });

        marker = new AdvancedMarkerElement({
            map,
            title: "Tu ubicación"
        });
    }

    // Geolocalizar al usuario
    let btLocateOnMap = document.getElementById('btLocateOnMap');
    btLocateOnMap.addEventListener('click', () => {
        navigator.geolocation.getCurrentPosition(
            (position) => {
                const userLocation = {
                    lat: position.coords.latitude,
                    lng: position.coords.longitude,
                };

                // center map on user location
                map.setZoom(15);
                map.setCenter(userLocation);
                marker.position = userLocation;
            },
            (error) => {
                console.error("Error en la geolocalización:", error.message);
            }
        );
    });
</script>
<script
  src="https://maps.googleapis.com/maps/api/js?key=API_KEY&loading=async&callback=initMap" defer>
</script>


Con lo cual obtenemos el siguiente resultado:

Recomendaciones

  • Solicitar permisos de manera clara: Explica al usuario por qué se necesita su ubicación, evita solicitar los permisos al cargar la página.
  • Experiencia alternativa: Si el usuario rechaza los permisos de geolocalización, usa alternativas para las interacciones como pedir ingresar manualmente su ubicación
  • Usar HTTPS: La geolocalización sólo funciona para sitios con certificado de seguridad, por lo que tu sitio debe tener su certificado SSL.
  • Optimizar recursos: Usa getCurrentPosition() en lugar de watchPosition() si no necesitas actualizaciones continuas.
  • Proteger la privacidad: No almacenes ni compartas la ubicación sin el consentimiento explícito de parte del usuario.

Conclusión

Implementar la geolocalización en JavaScript es una tarea sencilla , sin embargo debes manejar adecuadamente los errores, respetar la privacidad del usuario y optimizar el rendimiento de tu aplicación.

Referencias

Envíar Comentario

En este sitio los comentarios se publican previa aprobación del equipo de Kodetop. Evita los comentarios ofensivos, obscenos o publicitarios. Si deseas publicar código fuente puedes hacerlo entre las etiquedas <pre></pre>