Geolocalização e Mapas em JavaScript (Node.js): guia completo de bibliotecas e ferramentas
Trabalhar com dados geográficos e mapas é uma das tarefas principais das aplicações web modernas. Na plataforma Node.js, existem várias bibliotecas que permitem não apenas exibir mapas no cliente, mas também realizar processamento complexo de dados geoespaciais no servidor: geocodificação, geocodificação reversa, cálculo de distâncias, construção de rotas e análise de geometrias.
Neste artigo, vamos analisar as principais bibliotecas para trabalhar com geolocalização e mapas no ecossistema JavaScript (Node.js), fornecer exemplos de código e dar recomendações sobre como escolher a ferramenta certa para tarefas específicas.
1. Leaflet — mapas interativos no cliente
Leaflet é uma biblioteca JavaScript leve, mas poderosa, para criar mapas interativos. Ela funciona no lado do navegador, mas se integra bem com Node.js através de bundlers (Webpack, Vite) ou como parte de aplicações SSR.
Principais funcionalidades:
- Suporte a camadas de tiles (OpenStreetMap, Mapbox, Google Maps e outros);
- Marcadores, popups, polígonos, linhas;
- Manipulação de eventos (clique, movimento, zoom);
- Plugins para clusterização, heatmap, busca.
Exemplo de conexão e exibição de mapa com marcador:
<!DOCTYPE html><html><head> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script></head><body> <div id="map" style="height: 400px;"></div> <script> const map = L.map('map').setView([55.7558, 37.6173], 10); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(map); L.marker([55.7558, 37.6173]).addTo(map) .bindPopup('Moscou, Kremlin') .openPopup(); </script></body></html>Leaflet é ideal para frontend, mas se você precisar de geração de mapas no servidor (por exemplo, para impressão ou imagens estáticas), use leaflet-headless ou a combinação com Puppeteer.
2. node-geocoder — geocodificação e geocodificação reversa
node-geocoder é uma biblioteca universal para converter endereços em coordenadas e vice-versa. Suporta vários provedores: Google, OpenStreetMap (Nominatim), Yandex, Here e outros.
Instalação:
npm install node-geocoderExemplo de uso com OpenStreetMap:
const NodeGeocoder = require('node-geocoder');
const options = { provider: 'openstreetmap', language: 'pt'};
const geocoder = NodeGeocoder(options);
// Geocodificação direta (endereço → coordenadas)geocoder.geocode('Praça Vermelha, Moscou') .then(res => { console.log('Coordenadas:', res[0].latitude, res[0].longitude); }) .catch(err => console.error(err));
// Geocodificação reversa (coordenadas → endereço)geocoder.reverse({ lat: 55.7558, lon: 37.6173 }) .then(res => { console.log('Endereço:', res[0].formattedAddress); }) .catch(err => console.error(err));A biblioteca lida automaticamente com limites de requisições e suporta cache. É recomendada para aplicações no servidor onde é necessário converter dados do usuário.
3. Turf.js — geoanálise e operações espaciais
Turf.js é uma biblioteca para análise geoespacial. Funciona tanto no navegador quanto no Node.js. Inclui mais de 150 módulos para trabalhar com GeoJSON.
Principais funcionalidades:
- Cálculo de distâncias (Haversine, Vincenty);
- Busca de interse