Geolocalização e Mapas em Rust: visão geral das bibliotecas para trabalhar com coordenadas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Geolocalização e Mapas em Rust: visão geral das bibliotecas e ferramentas

Rust é uma linguagem de programação de sistemas que está sendo cada vez mais usada para criar aplicações de alta carga e seguras, incluindo aquelas que trabalham com dados geográficos. Neste artigo, veremos as principais bibliotecas do ecossistema Rust para trabalhar com geolocalização, coordenadas e mapas, além de fornecer exemplos práticos de código.



1. Biblioteca geo — base para operações geométricas

geo é uma biblioteca fundamental para trabalhar com tipos geométricos: pontos, linhas, polígonos. Ela fornece algoritmos para cálculo de distâncias, áreas, interseções e zonas de buffer. É usada como base para muitos outros 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); // São Petersburgo

let distance = p1.euclidean_distance(&p2); println!("Distância Euclidiana: {:.2} graus", distance);

// Criando uma linha (rota) let line = LineString::from(vec![ (37.6173, 55.7558), (30.3156, 59.9386), ]);

// Comprimento da linha em graus let length: f64 = line.euclidean_length(); println!("Comprimento da linha: {:.2} graus", length);}


2. georust — ecossistema para dados geoespaciais

O grupo de crates georust inclui várias bibliotecas complementares:

  • geo-types — tipos de dados (Point, Polygon, MultiPolygon).
  • geo-algorithms — algoritmos (buffer, triangulação de Delaunay, envoltória convexa).
  • proj — transformação de sistemas de coordenadas (por exemplo, de WGS84 para projeção de Mercator).
  • gpx — leitura/escrita de arquivos GPX (formato de troca de trilhas GPS).


Exemplo de transformação de coordenadas usando proj:

use proj::Proj;

fn main() { // Criando um transformador de WGS84 (EPSG:4326) para Web Mercator (EPSG:3857) let from = "EPSG:4326"; let to = "EPSG:3857"; let transform = Proj::new_known_crs(from, to, None).unwrap();

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


3. navi — trabalhando com mapas OpenStreetMap

navi é uma biblioteca para carregar e processar dados cartográficos do OpenStreetMap (OSM). Permite extrair estradas, edifícios, pontos de interesse (POI) e construir rotas. Para funcionar, é necessário um arquivo de mapa no formato PBF.



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

fn main() { // Carregando o mapa de um arquivo PBF let map = Map::from_pbf("moscow.osm.pbf").unwrap();

// Obtendo todos os nós (nodes) em um raio definido let center = (37.6173, 55.7558); let nodes_in_radius: Vec<NodeId> = map.nodes_within_radius(center, 1000.0).unwrap(); println!("Nós encontrados: {}", nodes_in_radius.len());

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


4. Visualização de mapas: plotters + geo

Para exibir mapas em Rust, você pode usar a biblioteca plotters em conjunto com geo. Ela permite desenhar polígonos, linhas e pontos em uma tela e salvar o resultado em PNG/SVG.



use plotters                    

Recommendations