Géolocalisation et cartes en Rust : aperçu des bibliothèques pour travailler avec les coordonnées

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 bibliothèques et outils

Rust est un langage de programmation système de plus en plus utilisé pour créer des applications haute performance et sécurisées, y compris celles qui traitent des données géospatiales. Dans cet article, nous examinerons les principales bibliothèques de l'écosystème Rust pour la géolocalisation, les coordonnées et les cartes, et fournirons des exemples pratiques de code.



1. La bibliothèque geo — fondement des opérations géométriques

geo est une bibliothèque fondamentale pour travailler avec des types géométriques : points, lignes, polygones. Elle fournit des algorithmes pour calculer les distances, les surfaces, les intersections et les zones tampons. Elle est utilisée comme base pour de nombreuses autres crates.



use geo::{Point, LineString, EuclideanDistance};

fn main() { let p1 = Point::new(37.6173, 55.7558); // Moscou let p2 = Point::new(30.3156, 59.9386); // Saint-Pétersbourg

let distance = p1.euclidean_distance(&p2); println!("Distance euclidienne : {:.2} degrés", distance);

// Création d'une ligne (itinéraire) let line = LineString::from(vec![ (37.6173, 55.7558), (30.3156, 59.9386), ]);

// Longueur de la ligne en degrés let length: f64 = line.euclidean_length(); println!("Longueur de la ligne : {:.2} degrés", length);}


2. georust — écosystème pour les données géospatiales

Le groupe de crates georust comprend plusieurs bibliothèques complémentaires :

  • geo-types — types de données (Point, Polygon, MultiPolygon).
  • geo-algorithms — algorithmes (tampon, triangulation de Delaunay, enveloppe convexe).
  • proj — transformation de systèmes de coordonnées (par exemple, de WGS84 à la projection Mercator).
  • gpx — lecture/écriture de fichiers GPX (format d'échange de traces GPS).


Exemple de transformation de coordonnées avec proj :

use proj::Proj;

fn main() { // Création d'un transformateur de WGS84 (EPSG:4326) vers Web Mercator (EPSG:3857) let from = "EPSG:4326"; let to = "EPSG:3857"; let transform = Proj::new_known_crs(from, to, None).unwrap();

// Coordonnées de Moscou let (x, y) = transform.convert((37.6173, 55.7558)).unwrap(); println!("Web Mercator : x={:.2}, y={:.2}", x, y);}


3. navi — travail avec les cartes OpenStreetMap

navi est une bibliothèque pour télécharger et traiter des données cartographiques depuis OpenStreetMap (OSM). Elle permet d'extraire des routes, des bâtiments, des points d'intérêt (POI) et de construire des itinéraires. Son utilisation nécessite un fichier cartographique au format PBF.



use navi::{Map, NodeId, WayId};

fn main() { // Chargement de la carte depuis un fichier PBF let map = Map::from_pbf("moscou.osm.pbf").unwrap();

// Obtention de tous les nœuds (nodes) dans un rayon donné let center = (37.6173, 55.7558); let nodes_in_radius: Vec<NodeId> = map.nodes_within_radius(center, 1000.0).unwrap(); println!("Nœuds trouvés : {}", nodes_in_radius.len());

// Extraction des routes (highways) let ways: Vec<WayId> = map.ways().filter(|w| w.is_highway()).collect(); println!("Nombre de routes : {}", ways.len());}


4. Visualisation de cartes : plotters + geo

Pour afficher des cartes en Rust, on peut utiliser la bibliothèque plotters en combinaison avec geo. Elle permet de dessiner des polygones, des lignes et des points sur un canevas et d'enregistrer le résultat au format PNG/SVG.



use plotters                    

Recommendations