Géolocalisation et cartes en Rust : aperçu des bibliothèques et outils

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Géolocalisation et cartes en Rust : aperçu des outils et exemples de code



Rust est un langage de programmation système de plus en plus utilisé pour créer des services à forte charge traitant des données spatiales. Grâce à ses performances, sa sécurité mémoire et sa communauté active, l'écosystème Rust propose plusieurs bibliothèques matures pour la géolocalisation, les cartes et les formats de données géographiques. Dans cet article, nous examinons les outils clés : geo, georust (incluant gpx et geojson), ainsi que l'intégration avec des bibliothèques cartographiques via WebAssembly.



1. Bibliothèque principale : geo



La bibliothèque geo est le cœur de l'écosystème de calcul géospatial en Rust. Elle fournit des types de données (points, lignes, polygones), des algorithmes (calcul de distances, surfaces, intersections) et le support des systèmes de coordonnées courants (WGS84, UTM).



Installation

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


Exemple : calcul de la distance entre deux points

use geo::{point, Distance};

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

// Distance sphérique (algorithme de Haversine) let distance = moscow.distance_haversine(&london); println!("Distance de Moscou à Londres : {:.2} km", distance / 1000.0);}


La bibliothèque prend en charge :

  • Types de géométries : Point, LineString, Polygon, MultiPoint, etc.
  • Algorithmes : bufferisation, simplification de lignes (Ramer-Douglas-Peucker), calcul du centroïde.
  • Travail avec les SCR via la crate proj.


2. Travail avec les formats : GeoJSON et GPX



Pour la lecture et l'écriture de données géographiques, des crates distinctes de l'écosystème georust sont utilisées.



GeoJSON

La crate geojson permet de sérialiser/désérialiser le GeoJSON, un format standard d'échange de données géographiques.

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!("Géométrie : {:?}", feature.geometry); }}


GPX (GPS Exchange Format)

La crate gpx est conçue pour travailler avec les traces et les points de cheminement enregistrés par les appareils GPS.

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!("Nom de la trace : {:?}", track.name); for segment in track.segments { for point in segment.points { println!("Point : ({:.4}, {:.4})", point.point().x(), point.point().y()); } } }}


3. Visualisation de cartes : Leaflet.js via WASM



Pour afficher des cartes sur une page web, vous pouvez utiliser Leaflet.js en combinaison avec Rust via WebAssembly. Une approche courante consiste à générer du HTML/JavaScript côté Rust avec la crate wasm-bindgen et à intégrer la carte via leaflet.js.



Exemple : création d'une carte avec un marqueur

// 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();

// Créer un div pour la carte let map_div = document.create_element("div").unwrap(); map_div.set_attribute("id", "map").u

Recommendations