Geolokalisierung und Karten in Rust: Überblick über Bibliotheken und Werkzeuge
Rust ist eine systemnahe Programmiersprache, die zunehmend für die Erstellung hochperformanter und sicherer Anwendungen verwendet wird, einschließlich solcher, die mit Geodaten arbeiten. In diesem Artikel betrachten wir die wichtigsten Bibliotheken des Rust-Ökosystems für die Arbeit mit Geolokalisierung, Koordinaten und Karten und geben praktische Codebeispiele.
1. Die Bibliothek geo – Grundlage geometrischer Operationen
geo ist eine grundlegende Bibliothek für die Arbeit mit geometrischen Typen: Punkten, Linien, Polygonen. Sie bietet Algorithmen zur Berechnung von Entfernungen, Flächen, Schnittmengen und Pufferzonen. Sie wird als Grundlage für viele andere Crates verwendet.
use geo::{Point, LineString, EuclideanDistance};
fn main() { let p1 = Point::new(37.6173, 55.7558); // Moskau let p2 = Point::new(30.3156, 59.9386); // Sankt Petersburg
let distance = p1.euclidean_distance(&p2); println!("Euklidische Entfernung: {:.2} Grad", distance);
// Erstellen einer Linie (Route) let line = LineString::from(vec![ (37.6173, 55.7558), (30.3156, 59.9386), ]);
// Länge der Linie in Grad let length: f64 = line.euclidean_length(); println!("Linienlänge: {:.2} Grad", length);}2. georust – Ökosystem für Geodaten
Die Gruppe von Crates georust umfasst mehrere sich ergänzende Bibliotheken:
geo-types– Datentypen (Point, Polygon, MultiPolygon).geo-algorithms– Algorithmen (Pufferung, Delaunay-Triangulation, konvexe Hülle).proj– Koordinatensystemtransformation (z. B. von WGS84 in Mercator-Projektion).gpx– Lesen/Schreiben von GPX-Dateien (Austauschformat für GPS-Tracks).
Beispiel für die Koordinatentransformation mit proj:
use proj::Proj;
fn main() { // Erstellen eines Transformators von WGS84 (EPSG:4326) nach Web Mercator (EPSG:3857) let from = "EPSG:4326"; let to = "EPSG:3857"; let transform = Proj::new_known_crs(from, to, None).unwrap();
// Koordinaten von Moskau let (x, y) = transform.convert((37.6173, 55.7558)).unwrap(); println!("Web Mercator: x={:.2}, y={:.2}", x, y);}3. navi – Arbeit mit OpenStreetMap-Karten
navi ist eine Bibliothek zum Laden und Verarbeiten von Kartendaten aus OpenStreetMap (OSM). Sie ermöglicht das Extrahieren von Straßen, Gebäuden, Points of Interest (POI) und das Erstellen von Routen. Für die Arbeit wird eine Kartendatei im PBF-Format benötigt.
use navi::{Map, NodeId, WayId};
fn main() { // Karte aus PBF-Datei laden let map = Map::from_pbf("moscow.osm.pbf").unwrap();
// Alle Knoten (nodes) in einem bestimmten Radius abrufen let center = (37.6173, 55.7558); let nodes_in_radius: Vec<NodeId> = map.nodes_within_radius(center, 1000.0).unwrap(); println!("Knoten gefunden: {}", nodes_in_radius.len());
// Straßen (highways) extrahieren let ways: Vec<WayId> = map.ways().filter(|w| w.is_highway()).collect(); println!("Anzahl der Straßen: {}", ways.len());}4. Kartendarstellung: plotters + geo
Zur Darstellung von Karten in Rust kann die Bibliothek plotters in Kombination mit geo verwendet werden. Sie ermöglicht das Zeichnen von Polygonen, Linien und Punkten auf einer Leinwand und das Speichern des Ergebnisses als PNG/SVG.
use plotters Auch in der Bibliothek
Guzzle für PHP: Vollständige Anleitung mit Beispielen
golangci-lint für Go: Vollständige Anleitung mit Beispielen
Konfiguration von JavaScript-Anwendungen (Node.js): Bibliotheken dotenv, convict, nconf
Überwachung von Swift-Anwendungen auf iOS/macOS: Bibliotheken und Tools