Car
The Car Routing is used for all analyses in GOAT that contain car trips.
1. Objectives
Car routing is used for many indicators in GOAT, such as Catchment Areas and Heatmaps.
As GOAT also allows the creation of Scenarios on the Street Network, a custom routing algorithm is needed that also reflects the changes of the scenario in the accessibility analyses. For the mode of the car, we thereby only consider paths that are suitable for driving.
2. Data
Routing Network
Data from the Overture Maps Foundation is used as a routing network in GOAT. It includes the transportation infrastructure with edges (for any continuous path not bisected by another) and nodes (for any point where two distinct paths intersect), representing real-world networks.
3. Technical Details
Data Pre-processing
The following steps are performed on the data to enable quick and accurate routing for cars:
- Attribute Parsing: Categorizing attributes of edges (street
class
andsurface
). - Geospatial Indexing: Utilizing Uber's H3 grid-based indexing for efficient routing.
- Extracting Restrictions: Identifying one-way access restrictions in addition to speed limits for both directions of the edge (
maxspeed_forward
andmaxspeed_backward
).
Routing Process Steps
Sub-network Extraction
- Buffer Region: Based on user-origin, travel time, and maximum potential driving speed.
- Edge Filtering: Include only relevant edges for driving.
For car routing, the edges of the following street classes are considered:
motorway
, primary
, secondary
, tertiary
, residential
, living_street
, trunk
, parking_aisle
, driveway
, alley
and track
.
You can find further information on this classification in the Overture Wiki.
Artificial Edge Creation
User-provided origin points are typically located a short distance away from the street network. To account for the additional time (or cost) of driving from the origin to its nearest street (e.g. using an unmarked driveway), artificial (or simulated) edges are created.
Edge Cost Computation
For all edges in the sub-network, a cost value (represented as time) is calculated based on path length and driving speed.
Cost function for car:
cost_forward = length / maxspeed_forward
cost_reverse = length / maxspeed_backward
When calculating cost_reverse
, if an edge contains a one-way restriction and therefore must not be traversed in the reverse direction, it is given a very large cost. This prevents the routing algorithm from considering such edges for routing in the reverse direction.
GOAT's routing algorithm does not currently take into account historic traffic patterns for car routing. This feature is currently under development. 🧑🏻💻
Network Propagation
To compute the shortest path from the origin point to various destinations, a custom implementation of the well-known Dijkstra Algorithm is used.
GIF: Dijkstra Algorithm
The implementation has a time complexity of O(ElogV), is written in Python, and uses the just-in-time compiler Numba.