fn main() -> Result<(), Box<dyn std::error::Error>> {
use maliput::api::{RoadNetwork, RoadNetworkBackend};
use std::collections::HashMap;
let package_location = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let xodr_path = format!("{}/data/xodr/TShapeRoad.xodr", package_location);
let road_network_properties = HashMap::from([
("road_geometry_id", "my_rg_from_rust"),
("opendrive_file", xodr_path.as_str()),
]);
let road_network = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties)?;
let road_geometry = road_network.road_geometry();
println!("linear_tolerance: {}", road_geometry.linear_tolerance());
println!("angular_tolerance: {}", road_geometry.angular_tolerance());
println!("num_junctions: {}", road_geometry.num_junctions());
for i in 0..road_geometry.num_junctions() {
let junction = road_geometry.junction(i).unwrap();
println!(" junction id: {}", junction.id());
for j in 0..junction.num_segments() {
let segment = junction.segment(j).unwrap();
println!("\tsegment id: {}", segment.id());
for k in 0..segment.num_lanes() {
let lane = segment.lane(k).unwrap();
println!("\t\tlane id: {}", lane.id());
}
}
}
let lanes = road_geometry.get_lanes();
println!("num_lanes: {}", lanes.len());
println!("lanes: ");
for lane in lanes {
println!("\tlane id: {}", lane.id());
}
let inertial_position = maliput::api::InertialPosition::new(10.0, 0.0, 0.0);
let road_position_query = road_geometry.to_road_position(&inertial_position)?;
let round_inertial_pos = road_position_query.road_position.to_inertial_position()?;
assert!((inertial_position.x() - round_inertial_pos.x()).abs() < road_geometry.linear_tolerance());
Ok(())
}