The goals of transitr
are to make it easy to load GTFS data into a database,
construct a transit network of roads and intersections,
and model vehicles in real-time from an API feed to update the network
and generate ETAs.
transitr
is not (yet) on CRAN, so for you would need to use devtools
:
devtools::install_github('tmelliott/transitr')
Still under development! This here is just for demonstration of what it could be like at some point in the future.
library(transitr)
library(magrittr)
## Create a database, construct network, and connect to a realtime feed
dbname <- "realtime.db"
nw <- create_gtfs("https://cdn01.at.govt.nz/data/gtfs.zip", db = dbname) %>%
construct() %>%
realtime_feed("https://api.at.govt.nz/v2/public/realtime/vehiclelocations",
with_headers("Ocp-Apim-Subscription-Key" = "mykey"),
response = "protobuf")
## Set the parameters and then run the model
nw %>%
set_parameters(n_core = 2,
n_particles = 500,
gps_error = 5) %>%
model()
Once running, you can launch a new R session and view the shiny app:
transitr::view_realtime("realtime.db")
In order to facilitate model development and checking, there's also a mock data server
in the simulations
directory.
To install:
cd simulations
yarn
## or if you don't use yarn
npm install
To start the server, you need first an archive of vehicle position feeds,
ls archive | grep vehicle | head -n 5
# vehicle_locations_20180911050001.pb
# vehicle_locations_20180911050031.pb
# vehicle_locations_20180911050102.pb
# vehicle_locations_20180911050132.pb
# vehicle_locations_20180911050201.pb
yarn start
# yarn run v1.9.4
# $ node mock_server.js
# Mock GTFS server running on port 3000!
Now you can run the model with the local server, which will automatically serve the next file with each request.
## assumeing you've constructed with simulation flag:
## $ make FLAGS="-DSIMULATION"
## simulation history will be saved in a `history` directory
dir.create("history")
## set some process ID for the server to recognise (allows running multiple simulations simultaneously)
pid <- "test1"
nw <- load_gtfs("fulldata.db") %>%
realtime_feed(sprintf("http://localhost:3000/%s/vehicle_positions", pid),
response = "protobuf") %>%
set_parameters(n_core = 1,
n_particles = 2000,
gps_error = 10)
nw %>% model()