pub struct RoadNetwork { /* private fields */ }Implementations§
Source§impl RoadNetwork
impl RoadNetwork
pub async fn cache_stats() -> CacheStats
pub async fn clear_cache()
pub async fn evict(bbox: &BoundingBox) -> bool
pub async fn cached_regions() -> Vec<BoundingBox>
Source§impl RoadNetwork
impl RoadNetwork
pub async fn load_or_fetch( bbox: &BoundingBox, config: &NetworkConfig, progress: Option<&Sender<RoutingProgress>>, ) -> Result<NetworkRef, RoutingError>
pub async fn fetch( bbox: &BoundingBox, config: &NetworkConfig, progress: Option<&Sender<RoutingProgress>>, ) -> Result<Self, RoutingError>
Source§impl RoadNetwork
impl RoadNetwork
pub async fn compute_matrix( &self, locations: &[Coord], progress: Option<&Sender<RoutingProgress>>, ) -> TravelTimeMatrix
pub async fn compute_geometries( &self, locations: &[Coord], progress: Option<&Sender<RoutingProgress>>, ) -> HashMap<(usize, usize), Vec<Coord>>
Source§impl RoadNetwork
impl RoadNetwork
pub fn new() -> Self
Sourcepub fn nodes_iter(&self) -> impl Iterator<Item = (f64, f64)> + '_
pub fn nodes_iter(&self) -> impl Iterator<Item = (f64, f64)> + '_
Iterate over all nodes as (lat, lng) pairs.
Sourcepub fn edges_iter(&self) -> impl Iterator<Item = (usize, usize, f64, f64)> + '_
pub fn edges_iter(&self) -> impl Iterator<Item = (usize, usize, f64, f64)> + '_
Iterate over all edges as (from_idx, to_idx, travel_time_s, distance_m) tuples.
Sourcepub fn snap_to_road(&self, coord: Coord) -> Option<NodeIdx>
pub fn snap_to_road(&self, coord: Coord) -> Option<NodeIdx>
Snap a coordinate to the nearest node in the road network.
Returns None if the network is empty.
Sourcepub fn snap_to_road_detailed(
&self,
coord: Coord,
) -> Result<SnappedCoord, RoutingError>
pub fn snap_to_road_detailed( &self, coord: Coord, ) -> Result<SnappedCoord, RoutingError>
Snap a coordinate to the road network with detailed information.
Returns a SnappedCoord containing both original and snapped coordinates,
the snap distance, and an internal node index for routing.
Sourcepub fn snap_to_edge(
&self,
coord: Coord,
) -> Result<EdgeSnappedLocation, RoutingError>
pub fn snap_to_edge( &self, coord: Coord, ) -> Result<EdgeSnappedLocation, RoutingError>
Snap a coordinate to the nearest road segment (edge-based snapping).
This is production-grade snapping that projects the coordinate onto the nearest road segment rather than snapping to the nearest intersection.
Sourcepub fn route(&self, from: Coord, to: Coord) -> Result<RouteResult, RoutingError>
pub fn route(&self, from: Coord, to: Coord) -> Result<RouteResult, RoutingError>
Find a route between two coordinates.
This method snaps both coordinates to the nearest road-network nodes,
then runs the public travel-time search over those snapped nodes.
The current implementation passes a zero heuristic to astar, so its
behavior is equivalent to Dijkstra’s algorithm.
Sourcepub fn route_edge_snapped(
&self,
from: &EdgeSnappedLocation,
to: &EdgeSnappedLocation,
) -> Result<RouteResult, RoutingError>
pub fn route_edge_snapped( &self, from: &EdgeSnappedLocation, to: &EdgeSnappedLocation, ) -> Result<RouteResult, RoutingError>
Find a route between two edge-snapped locations.
Use this when start and end should stay on their containing road segments instead of being snapped all the way to graph nodes.
Sourcepub fn route_snapped(
&self,
from: &SnappedCoord,
to: &SnappedCoord,
) -> Result<RouteResult, RoutingError>
pub fn route_snapped( &self, from: &SnappedCoord, to: &SnappedCoord, ) -> Result<RouteResult, RoutingError>
Find a route between two node-snapped coordinates.
This expects SnappedCoord values produced by snap_to_road_detailed
and returns geometry along graph nodes, not projected edge endpoints.
Sourcepub fn route_with(
&self,
from: Coord,
to: Coord,
objective: Objective,
) -> Result<RouteResult, RoutingError>
pub fn route_with( &self, from: Coord, to: Coord, objective: Objective, ) -> Result<RouteResult, RoutingError>
Find a route between two coordinates with an explicit optimization objective.
Like route, this method snaps to the nearest graph nodes first and
uses admissible straight-line lower bounds for both objectives.
pub fn node_count(&self) -> usize
pub fn edge_count(&self) -> usize
pub fn strongly_connected_components(&self) -> usize
pub fn largest_component_fraction(&self) -> f64
pub fn is_strongly_connected(&self) -> bool
Sourcepub fn filter_to_largest_scc(&mut self)
pub fn filter_to_largest_scc(&mut self)
Filter the network to keep only the largest strongly connected component.
Source§impl RoadNetwork
impl RoadNetwork
Sourcepub fn from_test_data(
nodes: &[(f64, f64)],
edges: &[(usize, usize, f64, f64)],
) -> Self
pub fn from_test_data( nodes: &[(f64, f64)], edges: &[(usize, usize, f64, f64)], ) -> Self
Build a network from raw node/edge data (for testing).
§Arguments
nodes- Slice of (lat, lng) tuples for each nodeedges- Slice of (from_idx, to_idx, time_s, dist_m) tuples
§Example
use solverforge_maps::RoadNetwork;
let nodes = &[(40.0, -75.0), (39.8, -75.2)];
let edges = &[(0, 1, 60.0, 1000.0), (1, 0, 60.0, 1000.0)];
let network = RoadNetwork::from_test_data(nodes, edges);
assert_eq!(network.node_count(), 2);
assert_eq!(network.edge_count(), 2);Trait Implementations§
Auto Trait Implementations§
impl Freeze for RoadNetwork
impl RefUnwindSafe for RoadNetwork
impl Send for RoadNetwork
impl Sync for RoadNetwork
impl Unpin for RoadNetwork
impl UnsafeUnpin for RoadNetwork
impl UnwindSafe for RoadNetwork
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more