Geolokalisierung und Karten in JavaScript (Node.js)
Die Arbeit mit geografischen Daten und der Darstellung von Karten ist eine der Kernaufgaben moderner Webanwendungen. Im Node.js-Ökosystem gibt es zahlreiche Bibliotheken, die es ermöglichen, Koordinaten zu verarbeiten, Routen zu berechnen, Reverse Geocoding durchzuführen und interaktive Karten zu rendern. In diesem Artikel betrachten wir die wichtigsten Werkzeuge und geben praktische Codebeispiele für den serverseitigen Teil (Node.js).
1. Grundlegende Bibliotheken für die Arbeit mit Geodaten
1.1. Leaflet (Client-seitig) und node-leaflet
Leaflet ist die beliebteste JavaScript-Bibliothek für interaktive Karten. Sie läuft im Browser, aber für Node.js gibt es das Paket leaflet (über npm install leaflet), das es ermöglicht, Karten serverseitig mit leaflet-headless zu rendern oder Daten im GeoJSON-Format zu verwenden.
Beispiel für die Generierung einer Karte als Bild auf dem Server (mit leaflet-static):
const L = require('leaflet');const { createCanvas } = require('canvas');
const map = L.map(createCanvas(800, 600), { center: [55.751244, 37.618423], // Moskau zoom: 10});
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors'}).addTo(map);
// Export nach PNG (vereinfacht)const buffer = map.getCanvas().toBuffer();require('fs').writeFileSync('map.png', buffer);1.2. OpenStreetMap (OSM) und Overpass API
OpenStreetMap bietet kostenlose Kacheln und eine API zur Objektsuche. In Node.js wird für die Arbeit mit OSM häufig das Paket osmosis oder direkte HTTP-Anfragen an https://nominatim.openstreetmap.org verwendet.
Beispiel für Reverse Geocoding (Adresse aus Koordinaten ermitteln):
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));// Ergebnis: "Moskau, Russland, Roter Platz"1.3. Turf.js — Geodatenanalyse
Turf.js ist eine leistungsstarke Bibliothek zur Durchführung geometrischer Operationen: Pufferung, Zusammenführen von Polygonen, Berechnung von Entfernungen, Flächen usw. Sie funktioniert sowohl im Browser als auch in Node.js.
Beispiel für die Berechnung der Entfernung zwischen zwei Punkten (in Kilometern):
const turf = require('@turf/turf');
const point1 = turf.point([37.618423, 55.751244]); // [lon, lat]const point2 = turf.point([30.315868, 59.939095]); // Sankt Petersburg
const distance = turf.distance(point1, point2, { units: 'kilometers' });console.log(`Entfernung: ${distance.toFixed(2)} km`); // ≈ 634,5 km1.4. GeoJSON und shapefile
GeoJSON ist ein Format zur Speicherung geografischer Strukturen (Punkte, Linien, Polygone). In Node.js reicht für die Arbeit damit das integrierte JSON.parse aus, zum Lesen von Shape-Dateien wird das Paket shapefile verwendet.
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. Fortgeschrittene Werkzeuge
2.1. Mapbox GL JS (Node.js)
Mapbox bietet eine kommerzielle Plattform mit hochdetaillierten Karten. Für serverseitiges Rendern verwenden Sie @mapbox/mapbox-gl-native. Ein API-Schlüssel ist erforderlich.
2.2. Nominatim (Geokodierung)
Auch in der Bibliothek
Node.js-Monitoring: Tools und Bibliotheken zur Leistungsüberwachung
Pandas Python: Datenanalyse mit DataFrame und Series lernen
ASIO für C++: Vollständiges Tutorial mit Beispielen
Poco für C++: Vollständiger Leitfaden mit Beispielen
Konfiguration von Kotlin-Anwendungen: Bibliotheken, Ansätze und Werkzeuge
Empfehlungen