Geolocalização e Mapas em Node.js: bibliotecas para trabalhar com mapas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Geolocalização e Mapas em JavaScript (Node.js): das coordenadas à visualização



As aplicações web modernas cada vez mais exigem trabalho com dados geográficos: desde a simples determinação da localização do usuário até a construção de rotas complexas e mapas interativos. No ecossistema Node.js, existem diversas ferramentas que permitem resolver essas tarefas. Neste artigo, vamos explorar as principais bibliotecas para geolocalização e mapas, além de apresentar exemplos práticos de seu uso.



1. Conceitos básicos: geolocalização e geocodificação



Antes de mergulharmos no código, vamos esclarecer os termos:

  • Geolocalização — determinação da localização física de um dispositivo (geralmente por IP, GPS ou Wi-Fi).
  • Geocodificação — conversão de um endereço (por exemplo, "Moscou, Praça Vermelha") em coordenadas geográficas (latitude, longitude).
  • Geocodificação reversa — conversão de coordenadas em um endereço legível.


Em Node.js, para essas tarefas, a biblioteca mais utilizada é node-geocoder, que suporta diversos provedores (Google Maps, OpenStreetMap, Nominatim, entre outros).



2. Instalação e configuração do node-geocoder



Para começar, instale o pacote:

npm install node-geocoder


Exemplo de uso básico com o provedor OpenStreetMap (Nominatim):

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

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

const geocoder = NodeGeocoder(options);

// Geocodificação de endereçogeocoder.geocode('Moscou, Kremlin') .then((res) => { console.log('Coordenadas:', res[0].latitude, res[0].longitude); }) .catch((err) => { console.log('Erro:', err); });

// Geocodificação reversageocoder.reverse({ lat: 55.7522, lon: 37.6156 }) .then((res) => { console.log('Endereço:', res[0].formattedAddress); }) .catch((err) => { console.log('Erro:', err); });


Observe: o serviço Nominatim tem limitações no número de requisições (1 requisição por segundo). Para produção, é melhor usar provedores pagos (Google, Here) ou configurar seu próprio servidor Nominatim.



3. Trabalhando com mapas no lado do servidor: Leaflet e OpenStreetMap



A biblioteca JavaScript mais popular para mapas interativos é o Leaflet. Ela funciona no navegador, mas você pode gerar mapas no servidor com Node.js e enviá-los ao cliente como HTML estático ou imagem.



Para gerar mapas estáticos (imagens), use o pacote leaflet-static ou node-static-map. Veja um exemplo com leaflet-static:



npm install leaflet-static


Exemplo de criação de uma imagem de mapa com um marcador:

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

const map = new LeafletStatic({ center: [55.7522, 37.6156], // Moscou 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: 'Praça Vermelha' } ]});

map.render() .then((buffer) => { // Salva a imagem require('fs').writeFileSync('map.png', buffer); console.log('Mapa salvo como map.png'); }) .catch((err) => { console.error('Erro:', err); });


Essa abordagem é útil para criar prévias de mapas, relatórios ou campanhas de e-mail.



4. Determinação de localização por IP



Para determinar a geolocalização por endereço IP em Node.js, o pacote geoip-lite é frequentemente usado. Ele utiliza o banco de dados local GeoLite2 da MaxMind.



npm install geoip-lite


Exemplo:

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

const ip = '8.8.8

Recommendations