Geolokalisierung und Karten in Rust: Bibliotheken für die Arbeit mit Koordinaten

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Geolokalisierung und Karten in Rust: Überblick über Bibliotheken und praktische Beispiele

Rust ist eine systemnahe Programmiersprache, die in Bereichen, die hohe Leistung und Sicherheit erfordern, an Popularität gewinnt. Die Arbeit mit Geodaten bildet hier keine Ausnahme. Wenn Sie einen Dienst für die Fahrzeugverfolgung, ein Geoinformationssystem entwickeln oder einfach eine interaktive Karte zu Ihrer Website hinzufügen möchten, bietet das Rust-Ökosystem mehrere ausgereifte Lösungen. In diesem Artikel betrachten wir die wichtigsten Bibliotheken für Geolokalisierung und Kartenanzeige und geben praktische Codebeispiele.



1. Die Bibliothek geo – Grundlage geometrischer Berechnungen

Die Bibliothek geo (Crate geo-types und geo) bietet grundlegende Datentypen: Punkte, Linien, Polygone sowie Algorithmen für deren Bearbeitung. Sie ist die Grundlage für viele andere Geo-Crates.

// cargo add geo-types geouse geo_types::{Point, LineString, Polygon};use geo::algorithm::haversine_distance;

fn main() { let moscow = Point::new(37.6173, 55.7558); let spb = Point::new(30.3351, 60.0);

// Haversine-Distanz (in Metern) let dist = haversine_distance(&moscow, &spb); println!("Entfernung Moskau — St. Petersburg: {:.0} km", dist / 1000.0);

// Polygon erstellen let coords = vec![ (37.0, 55.0), (38.0, 55.0), (38.0, 56.0), (37.0, 56.0), (37.0, 55.0), ]; let polygon = Polygon::new( LineString::from(coords), vec![], ); println!("Polygonfläche: {:?}", polygon.unsigned_area());}

Funktionen:

  • Typen: Point, Line, LineString, Polygon, MultiPoint, GeometryCollection
  • Algorithmen: Haversine-Distanz, Vincenty-Distanz, Fläche, Schwerpunkt, Pufferung, Überschneidungen
  • Serialisierung über serde (Kompatibilität mit GeoJSON)


2. geoutils – Arbeit mit GPS und Datenformaten

Die Crate geoutils spezialisiert sich auf das Parsen und Validieren von GPS-Daten. Sie kann NMEA-Strings (das Standardprotokoll von GPS-Empfängern) lesen und Koordinaten konvertieren.

// cargo add geoutilsuse geoutils::{Location, Distance};

fn main() { // Punkt aus Breitengrad/Längengrad erstellen let point_a = Location::new(55.7558, 37.6173).unwrap(); let point_b = Location::new(59.9343, 30.3351).unwrap();

// Haversine-Distanz let dist = point_a.distance_to(&point_b).unwrap(); println!("Entfernung: {} km", dist.as_kilometers());

// NMEA-String parsen (Beispiel) let nmea = "$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47"; if let Ok(loc) = Location::from_nmea(nmea) { println!("NMEA geparst: {:?}", loc); }}

Besonderheiten:

  • Parsen von NMEA-0183 (GPGGA, GPRMC)
  • Unterstützung von Formaten: DMS (Grad/Minuten/Sekunden), Dezimalgrad
  • Konvertierung zwischen Koordinatensystemen (WGS84, UTM)


3. mapbox-gl-native-rs – Karten-Rendering in Rust

Für die Darstellung von Karten in Desktop- oder eingebetteten Anwendungen kann der Rust-Wrapper um Mapbox GL Native verwendet werden. Die Bibliothek ermöglicht das Rendern von Vektorkacheln, das Platzieren von Markierungen und Polygonen sowie die Steuerung von Stilen.

// Beispiel vereinfacht – Umgebungseinrichtung erforderlich// cargo add mapbox-gl-native-rsuse mapbox_gl_native_rs::{Map, MapOptions, Style};

fn main() { let opts = MapOptions::new() .size(800, 600) .center(37.6173, 55.7558) .zoom(10.0);

let mut map = Map::new(opts); map.load_style(Style::from_url("https://demotiles.mapbox.com/style.json"));

// Marker hinzufügen map.add_marker(37.6173, 55.7558, "Moskau");

// Rendern in einen Puffer (z.B. PNG) let img = map.render_to_image(); img.save("map.png").unwrap();}

Hinweis: Für die Nutzung ist die Installation von

Empfehlungen