Car
The Car Routing is used for all analyses in GOAT that contain car trips.
1. Objectivesβ
Car routingGlossaryRoutingCalculating the best path between places across a transport network, and the time or distance that path takes.Read more β is used for many indicators in GOAT, such as Catchment Areas and Heatmaps.
A custom routing algorithm is used for the mode of the car, which only considers 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
classandsurface). - Geospatial Indexing: Utilizing Uber's H3 grid-basedGlossaryH3 gridA system that divides the earth's surface into hexagonal cells at several resolutions, used to compute and display values over an area.Read more β indexing for efficient routing.
- Extracting Restrictions: Identifying one-way access restrictions in addition to speed limits for both directions of the edge (
maxspeed_forwardandmaxspeed_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.
The implementation has a time complexity of O(ElogV), is written in Python, and uses the just-in-time compiler Numba.