Hierarchical routing is a method to scale navigation systems by organizing road networks into levels of detail. Higher levels represent broader routes (e.g., highways), while lower levels detail finer-grained roads. Navigation algorithms utilize these levels to compute efficient routes while minimizing unnecessary computations.
Key Concept: Anchor Points
Anchor points are key connections between different levels of the hierarchy. They ensure continuity when transitioning between higher-level tiles (e.g., highways) and lower-level tiles (e.g., city streets).
Anchor points are used at various levels:
- Global Planning:
- High-level algorithms (e.g., Level 0) compute routes between anchor points, ignoring local details.
- Example: Route includes “Highway A → Exit C → Highway B.”
- Local Refinement:
- Anchor points connect high-level routes to finer-level roads.
- Example: “Exit C” is connected to “City Road D” in Level 1 or Level 2.
Precomputed Connections
During preprocessing, all anchor points are identified and indexed to ensure that:
- Every tile stores a list of inbound and outbound anchor points.
- Boundary edges are consistent across tiles and levels.
Preprocessing for Hierarchical Routing
Preprocessing ensures that the road network is partitioned into levels and optimized for navigation.
- Tile Partitioning:
- Divide the road network into tiles using a quadtree or other spatial indexing methods.
- Each tile corresponds to a specific level of detail (e.g., Level 0 for highways, Level 2 for local streets).
- Hierarchy Construction:
- Aggregate roads into hierarchical levels:
- Level 0: Highways and inter-city roads.
- Level 1: Major urban roads and regional connectors.
- Level 2: Local roads and neighborhood streets.
- Simplify lower levels into higher-level representations.
- Aggregate roads into hierarchical levels:
- Anchor Point Identification:
- Analyze tile boundaries to detect intersections between levels.
- Example:
- A highway in Level 0 connects to a city road in Level 1 via an anchor point.
- Anchor points are stored as metadata in both tiles.
- Edge Aggregation:
- Compress multiple edges into a single high-level edge for Level 0.
- Expand high-level edges into detailed paths at Level 1 or Level 2.
- Boundary Validation:
- Ensure shared edges and anchor points are consistent across adjacent tiles.
Algorithms for Multi-Level Navigation
Hierarchical navigation uses algorithms like A* or Dijkstra, augmented to work across levels. The choice depends on requirements for speed and accuracy.
A* and Dijkstra in Hierarchical Routing
- Global Planning:
- Use A* or Dijkstra on Level 0 to compute the rough route.
- A* is often preferred due to its heuristic optimization (e.g., Euclidean distance to destination).
- Local Refinement:
- Drill down into Level 1 and Level 2 tiles near the source and destination.
- Dijkstra may be used if the local graph size is small enough for exhaustive search.
Augmented Algorithms
- Multi-Level Dijkstra:
- Dijkstra’s algorithm is modified to work across hierarchical levels:
- High-level tiles are processed first.
- Edges leading to anchor points trigger lower-level expansions.
- Dijkstra’s algorithm is modified to work across hierarchical levels:
- Hierarchical A*:
- Combines A*’s heuristic with hierarchical optimizations:
- High-level heuristics guide the global path.
- Local refinement uses detailed heuristics for precise navigation.
- Combines A*’s heuristic with hierarchical optimizations:
Guaranteeing Continuity
Challenges:
- Ensuring that higher-level edges (e.g., highways) connect to lower-level roads (e.g., local streets).
- Maintaining consistent boundary data across tiles and levels.
Solutions:
- Anchor Point Metadata:
- Every tile stores a list of its anchor points, shared across levels and neighboring tiles.
- Dynamic Edge Expansion:
- High-level edges dynamically expand into detailed paths as needed.
- Bidirectional Search:
- Use bidirectional search to validate paths when crossing levels:
- Search forward from the source and backward from the destination.
- Merge paths at anchor points.
- Use bidirectional search to validate paths when crossing levels: