
An R tool to assist bus lane prioritization using GTFS and OSM data
GonΓ§alo Matos, Rosa FΓ©lix, Filipe Moura
Limit impacts of congestion
(Cesme et al. 2018)
Reducing travel time variability
(Surprenant-Legault and El-Geneidy 2011)
Increase commercial speed
(Basso et al. 2011)
Other modes can loose
quality of service
(Arasan and Vedagiri 2010)
Potential to jeopardize
public acceptance
(Batty et al. 2014)
Bus frequency π
Number of lanes π£οΈ
Traffic conditions π
Network continuity π


![]()

![]()




Feeds travel planning apps

{
"agency_id": "41",
"bikes_allowed": true,
"capacity_seated": 29,
"capacity_standing": 28,
"capacity_total": 57,
"contactless": false,
"id": "41|300",
"license_plate": "AC-45-FH",
"make": "CaetanoBus",
"model": "e.City Gold",
"owner": "SCOTTURB",
"propulsion": "electricity",
"registration_date": "20141110",
"wheelchair_accessible": true,
"bearing": 167,
"block_id": "1_1325-11",
"current_status": "INCOMING_AT",
"event_id": "6KLCD-41|300-1612_0_2_0800_0829_0_1",
"lat": 38.76739501953125,
"line_id": "1612",
"lon": -9.2985200881958,
"pattern_id": "1612_0_2",
"route_id": "1612_0",
"schedule_relationship": "SCHEDULED",
"shift_id": "TP 1+1325",
"speed": 3.611111111111111,
"stop_id": "172486",
"timestamp": 1778574545,
"trip_id": "[6KLCD]1612_0_2_0800_0829_0_1",
"door_status": "CLOSED"
}Follow vehicles in real-time
Follow vehicles in real-time

Infrastructure
GTFShift::get_route_frequency_hourly
![]()
GTFShift::get_route_frequency_hourly(overline=TRUE)
GTFShift::get_route_frequency_hourly(overline=TRUE)
But how?
relation[route=bus]
relation[route=bus]
relation[route=bus]
GTFShift::get_route_frequency_hourly
![]()
GTFShift::osm_shapes_match_routes
![]()
GTFShift::get_way_frequency_hourly
osmdata::opq
![]()
GTFShift::osm_bus_lanes
GTFShift::rt_collect
![]()
sf::st_buffer
![]()
GTFShift::rt_extend_prioritization
GTFShift::get_way_frequency_hourly
osmdata::opq
GTFShift::osm_bus_lanes
GTFShift::rt_extend_prioritization

π¦ Open source R package
π Comprehensive framework for bus lane prioritization
π Provides methods for the analysis of each individual dimension
π Enables aggregated analysis with one simple method

π Enables aggregated analysis with one simple method
library(GTFShift)
gtfs = GTFShift::load_feed("https://gateway.carris.pt/gateway/gtfs/api/v2.8/GTFS")
osm_q = opq(bbox=sf::st_bbox(tidytransit::shapes_as_sf(gtfs$shapes))) |>
add_osm_feature(key = "route", value = c("bus", "tram")) |>
add_osm_feature(key = "network", value = "Carris", key_exact = TRUE)
# Bus frequency π, Number of lanes π£οΈ, Network continuity π
lanes = GTFShift::prioritize_lanes(gtfs, osm_q)
rt_collection = read.csv("rt_collect_file.csv") |>
sf::st_as_sf(coords = c("vehicle.position.longitude", "vehicle.position.latitude"), crs = 4326)
# Traffic conditions π
lanes = GTFShift::rt_extend_prioritization(
lane_prioritization = lanes,
rt_collection = rt_collection
)Carris, Lisbon
Lisbon Metropolitan Area
Carris + Carris Metropolitana
Interactive dashboard to disseminate results
Keep contributing to OSM
Extend methods to evaluate operational performance
Apply methodology to international case studies
Write a paper


GonΓ§alo Matos, Rosa FΓ©lix, Filipe Moura

GonΓ§alo Matos