Geolokalisierung und Karten in Rust: Überblick über Bibliotheken und Werkzeuge

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 Werkzeuge und Codebeispiele



Rust ist eine systemnahe Programmiersprache, die zunehmend für die Erstellung hochlastiger Dienste verwendet wird, die mit räumlichen Daten arbeiten. Dank der Leistungsfähigkeit, Speichersicherheit und einer aktiven Community bietet das Rust-Ökosystem mehrere ausgereifte Bibliotheken für die Arbeit mit Geolokalisierung, Karten und Geodatenformaten. In diesem Artikel betrachten wir die wichtigsten Werkzeuge: geo, georust (einschließlich gpx und geojson) sowie die Integration mit Kartierungsbibliotheken über WebAssembly.



1. Hauptbibliothek: geo



Die Bibliothek geo ist der Kern des Ökosystems für georäumliche Berechnungen in Rust. Sie bietet Datentypen (Punkte, Linien, Polygone), Algorithmen (Berechnung von Entfernungen, Flächen, Überschneidungen) und Unterstützung für gängige Koordinatensysteme (WGS84, UTM).



Installation

# Cargo.toml[dependencies]geo = "0.27"


Beispiel: Berechnung der Entfernung zwischen zwei Punkten

use geo::{point, Distance};

fn main() { let moscow = point!(x: 37.6173, y: 55.7558); let london = point!(x: -0.1276, y: 51.5074);

// Entfernung auf der Kugel (Haversine-Algorithmus) let distance = moscow.distance_haversine(&london); println!("Entfernung von Moskau nach London: {:.2} km", distance / 1000.0);}


Die Bibliothek unterstützt:

  • Geometrietypen: Point, LineString, Polygon, MultiPoint u.a.
  • Algorithmen: Pufferung, Linienvereinfachung (Ramer-Douglas-Peucker), Berechnung des Schwerpunkts.
  • Arbeit mit CRS über die Crate proj.


2. Arbeit mit Formaten: GeoJSON und GPX



Zum Lesen und Schreiben von Geodaten werden separate Crates aus dem georust-Ökosystem verwendet.



GeoJSON

Die Crate geojson ermöglicht die Serialisierung/Deserialisierung von GeoJSON – einem Standardformat für den Austausch von Geodaten.

use geojson::{Feature, GeoJson, Geometry, Value};use serde_json;

fn main() { let geojson_str = r#"{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [37.6173, 55.7558] }, "properties": { "name": "Moscow" } }"#;

let geojson: GeoJson = geojson_str.parse().unwrap(); if let GeoJson::Feature(feature) = geojson { println!("Geometrie: {:?}", feature.geometry); }}


GPX (GPS Exchange Format)

Die Crate gpx ist für die Arbeit mit Tracks und Wegpunkten gedacht, die von GPS-Geräten aufgezeichnet wurden.

use gpx::read;use std::fs::File;

fn main() { let file = File::open("track.gpx").unwrap(); let gpx = read(file).unwrap();

for track in gpx.tracks { println!("Track-Name: {:?}", track.name); for segment in track.segments { for point in segment.points { println!("Punkt: ({:.4}, {:.4})", point.point().x(), point.point().y()); } } }}


3. Kartenvisualisierung: Leaflet.js über WASM



Zur Anzeige von Karten auf einer Webseite kann Leaflet.js in Verbindung mit Rust über WebAssembly verwendet werden. Ein gängiger Ansatz ist die Generierung von HTML/JavaScript auf der Rust-Seite mit Hilfe der Crate wasm-bindgen und die Einbettung der Karte über leaflet.js.



Beispiel: Erstellen einer Karte mit Marker

// cargo.toml[dependencies]wasm-bindgen = "0.2"

// main.rsuse wasm_bindgen::prelude::*;

#[wasm_bindgen]pub fn init_map() { let window = web_sys::window().unwrap(); let document = window.document().unwrap();

// Erstelle ein div für die Karte let map_div = document.create_element("div").unwrap(); map_div.set_attribute("id", "map").u

Empfehlungen