Geolocalización y mapas en JavaScript (Node.js): bibliotecas y ejemplos

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)

Trabajar con datos geográficos y visualización de mapas es una de las tareas clave de las aplicaciones web modernas. En el ecosistema de Node.js existen numerosas bibliotecas que permiten procesar coordenadas, construir rutas, realizar geocodificación inversa y renderizar mapas interactivos. En este artículo revisaremos las herramientas principales y proporcionaremos ejemplos prácticos de código para el lado del servidor (Node.js).



1. Bibliotecas principales para trabajar con datos geoespaciales



1.1. Leaflet (parte cliente) y node-leaflet

Leaflet es la biblioteca JavaScript más popular para mapas interactivos. Funciona en el lado del navegador, pero para Node.js existe el paquete leaflet (a través de npm install leaflet), que permite renderizar mapas en el servidor usando leaflet-headless o utilizar datos en formato GeoJSON.

Ejemplo de generación de un mapa como imagen en el servidor (con leaflet-static):

const L = require('leaflet');const { createCanvas } = require('canvas');

const map = L.map(createCanvas(800, 600), { center: [55.751244, 37.618423], // Moscú zoom: 10});

L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors'}).addTo(map);

// Exportar a PNG (simplificado)const buffer = map.getCanvas().toBuffer();require('fs').writeFileSync('map.png', buffer);


1.2. OpenStreetMap (OSM) y Overpass API

OpenStreetMap proporciona teselas gratuitas y una API para buscar objetos. En Node.js, para trabajar con OSM se suele usar el paquete osmosis o solicitudes HTTP directas a https://nominatim.openstreetmap.org.

Ejemplo de geocodificación inversa (obtener dirección a partir de coordenadas):

const fetch = require('node-fetch');

async function reverseGeocode(lat, lon) { const url = `https://nominatim.openstreetmap.org/reverse?format=json&lat=${lat}&lon=${lon}`; const response = await fetch(url, { headers: { 'User-Agent': 'PythonLibExample/1.0' } }); const data = await response.json(); return data.display_name;}

reverseGeocode(55.751244, 37.618423).then(addr => console.log(addr));// Resultado: "Moscú, Rusia, Plaza Roja"


1.3. Turf.js — análisis geoespacial

Turf.js es una potente biblioteca para realizar operaciones geométricas: buffer, unión de polígonos, cálculo de distancias, áreas, etc. Funciona tanto en el navegador como en Node.js.

Ejemplo de cálculo de distancia entre dos puntos (en kilómetros):

const turf = require('@turf/turf');

const point1 = turf.point([37.618423, 55.751244]); // [lon, lat]const point2 = turf.point([30.315868, 59.939095]); // San Petersburgo

const distance = turf.distance(point1, point2, { units: 'kilometers' });console.log(`Distancia: ${distance.toFixed(2)} km`); // ≈ 634.5 km


1.4. GeoJSON y shapefile

GeoJSON es un formato para almacenar estructuras geográficas (puntos, líneas, polígonos). En Node.js, para trabajar con él es suficiente con el JSON.parse incorporado, y para leer archivos shape se utiliza el paquete shapefile.

const shapefile = require('shapefile');

shapefile.open('path/to/file.shp') .then(source => source.read() .then(function log(result) { if (result.done) return; console.log(result.value); // GeoJSON Feature return source.read().then(log); })) .catch(error => console.error(error));


2. Herramientas avanzadas



2.1. Mapbox GL JS (Node.js)

Mapbox proporciona una plataforma comercial con mapas de alta resolución. Para renderizado del lado del servidor, use @mapbox/mapbox-gl-native. Se requiere una clave API.



2.2. Nominatim (geocodificación)

Recommendations