Geolocalização e Mapas em JavaScript (Node.js): bibliotecas e exemplos

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)

Trabalhar com dados geográficos e exibição de mapas é uma das tarefas principais das aplicações web modernas. No ecossistema Node.js, existem várias bibliotecas que permitem processar coordenadas, construir rotas, realizar geocodificação reversa e renderizar mapas interativos. Neste artigo, vamos explorar as principais ferramentas e fornecer exemplos práticos de código para o lado do servidor (Node.js).



1. Principais bibliotecas para trabalhar com dados geoespaciais



1.1. Leaflet (parte cliente) e node-leaflet

Leaflet é a biblioteca JavaScript mais popular para mapas interativos. Ela funciona no lado do navegador, mas para Node.js existe o pacote leaflet (via npm install leaflet), que permite renderizar mapas no servidor usando leaflet-headless ou utilizar dados no formato GeoJSON.

Exemplo de geração de mapa como imagem no servidor (usando leaflet-static):

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

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

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

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


1.2. OpenStreetMap (OSM) e Overpass API

OpenStreetMap fornece tiles gratuitos e uma API para busca de objetos. Em Node.js, para trabalhar com OSM, costuma-se usar o pacote osmosis ou requisições HTTP diretas para https://nominatim.openstreetmap.org.

Exemplo de geocodificação reversa (obter endereço 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: "Moscou, Rússia, Praça Vermelha"


1.3. Turf.js — análise geoespacial

Turf.js é uma biblioteca poderosa para realizar operações geométricas: buffer, união de polígonos, cálculo de distâncias, área, etc. Funciona tanto no navegador quanto no Node.js.

Exemplo de cálculo de distância entre dois pontos (em quilômetros):

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

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

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


1.4. GeoJSON e shapefile

GeoJSON é um formato para armazenar estruturas geográficas (pontos, linhas, polígonos). Em Node.js, para trabalhar com ele, basta usar o JSON.parse nativo, e para ler shapefiles, utiliza-se o pacote 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. Ferramentas avançadas



2.1. Mapbox GL JS (Node.js)

Mapbox fornece uma plataforma comercial com mapas de alta definição. Para renderização no servidor, use @mapbox/mapbox-gl-native. É necessária uma chave de API.



2.2. Nominatim (geocodificação)

Recommendations