Geolocalización y mapas en Node.js: bibliotecas para trabajar con mapas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Geolocalización y mapas en JavaScript (Node.js): de coordenadas a visualización



Las aplicaciones web modernas requieren cada vez más trabajar con datos geográficos: desde la simple determinación de la ubicación del usuario hasta la construcción de rutas complejas y mapas interactivos. En el ecosistema de Node.js existen múltiples herramientas que permiten resolver estas tareas. En este artículo, revisaremos las bibliotecas clave para geolocalización y mapas, y proporcionaremos ejemplos prácticos de su uso.



1. Conceptos básicos: geolocalización y geocodificación



Antes de sumergirnos en el código, aclaremos los términos:

  • Geolocalización — determinación de la ubicación física de un dispositivo (generalmente por IP, GPS o Wi-Fi).
  • Geocodificación — conversión de una dirección (por ejemplo, "Moscú, Plaza Roja") en coordenadas geográficas (latitud, longitud).
  • Geocodificación inversa — conversión de coordenadas en una dirección legible.


En Node.js, para estas tareas se utiliza con mayor frecuencia la biblioteca node-geocoder, que admite múltiples proveedores (Google Maps, OpenStreetMap, Nominatim, etc.).



2. Instalación y configuración de node-geocoder



Para empezar, instale el paquete:

npm install node-geocoder


Ejemplo de uso básico con el proveedor OpenStreetMap (Nominatim):

const NodeGeocoder = require('node-geocoder');

const options = { provider: 'openstreetmap',};

const geocoder = NodeGeocoder(options);

// Geocodificación de direccióngeocoder.geocode('Moscú, Kremlin') .then((res) => { console.log('Coordenadas:', res[0].latitude, res[0].longitude); }) .catch((err) => { console.log('Error:', err); });

// Geocodificación inversageocoder.reverse({ lat: 55.7522, lon: 37.6156 }) .then((res) => { console.log('Dirección:', res[0].formattedAddress); }) .catch((err) => { console.log('Error:', err); });


Tenga en cuenta: el servicio Nominatim tiene limitaciones en la cantidad de solicitudes (1 solicitud por segundo). Para producción, es mejor usar proveedores de pago (Google, Here) o configurar su propio servidor Nominatim.



3. Trabajo con mapas en el lado del servidor: Leaflet y OpenStreetMap



La biblioteca JavaScript más popular para mapas interactivos es Leaflet. Funciona en el navegador, pero puede generar mapas en el servidor con Node.js y enviarlos al cliente como HTML estático o imagen.



Para generar mapas estáticos (imágenes), use el paquete leaflet-static o node-static-map. Veamos un ejemplo con leaflet-static:



npm install leaflet-static


Ejemplo de creación de una imagen de mapa con un marcador:

const LeafletStatic = require('leaflet-static');

const map = new LeafletStatic({ center: [55.7522, 37.6156], // Moscú zoom: 12, size: [800, 600], layers: [ { tileLayer: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', attribution: '© OpenStreetMap contributors' } ], markers: [ { lat: 55.7522, lng: 37.6156, popup: 'Plaza Roja' } ]});

map.render() .then((buffer) => { // Guardamos la imagen require('fs').writeFileSync('map.png', buffer); console.log('Mapa guardado como map.png'); }) .catch((err) => { console.error('Error:', err); });


Este enfoque es útil para crear vistas previas de mapas, informes o campañas de correo electrónico.



4. Determinación de ubicación por IP



Para determinar la geolocalización por dirección IP en Node.js, a menudo se usa el paquete geoip-lite. Utiliza la base de datos local GeoLite2 de MaxMind.



npm install geoip-lite


Ejemplo:

const geoip = require('geoip-lite');

const ip = '8.8.8

Recommendations