2024-04-10 08:38:35 +00:00
|
|
|
# Jokullbase
|
|
|
|
|
|
|
|
How to track how late buses are:
|
2024-04-10 11:06:00 +00:00
|
|
|
- [x] Download bus route data
|
|
|
|
- [x] Insert raw bus positions into timescaledb/postGIS table?
|
|
|
|
- [x] "Fan-out" JSON responses into one DB row per datapoint.
|
2024-04-10 08:38:35 +00:00
|
|
|
- [ ] Download routes.
|
|
|
|
- There is an endpoint called Timetable, which takes a route number
|
|
|
|
(along with day of week etc).
|
|
|
|
- The timetable response includes a list of stops in the route,
|
|
|
|
along with the route ID.
|
|
|
|
- There is an endpoint called **BusLocationByStop**, which takes a
|
|
|
|
stop ID as a parameter.
|
|
|
|
- This information has upcoming arrivals, included estimated
|
|
|
|
arrival time, along with the current position of the bus.
|
|
|
|
- Record stop info every few minutes, notably the arrivals.
|
2024-04-10 11:06:00 +00:00
|
|
|
- This will be annoying to do only in DB since we have a trigger
|
|
|
|
for bus positions.
|
2024-04-10 08:38:35 +00:00
|
|
|
- [ ] Analyze actual arrival vs what the stop endpoint said about the
|
|
|
|
arrival.
|
|
|
|
- Use PostGIS to compute "bus arrived" event: When bus is within X
|
|
|
|
meters of a stop on its route, mark that as an arrival event.
|
|
|
|
- Once we have bus arrival events, we can compare them to arrivals
|
|
|
|
throughout the day.
|
|
|
|
- We can then discard the raw bus position data, as it's not needed
|
|
|
|
to store it: delete every raw data point between the last arrival
|
|
|
|
and the newly computed one.
|
2024-04-10 11:06:00 +00:00
|
|
|
|
|
|
|
Arrival computation:
|
|
|
|
- Can use edge functions for this?
|
|
|
|
- Function takes a bus route number, start time, end time.
|
|
|
|
- Cron in DB calls the edge functions, using state as function inputs.
|
|
|
|
- state = last interval end time, so we can properly calculate time interval to check.
|
|
|
|
- or rather use last ID in the raw table, so we don't skip entries.
|
|
|
|
- Query DB to get raw bus positions in the interval.
|
|
|
|
- Query DB to get all stops on the route (during the interval? some stops not in use sometimes)
|
|
|
|
- For each bus ID, find the raw position where its lat,lon are X meters away from stop lat,lons.
|
|
|
|
- These are arrival times for this bus ID, at each stop.
|
|
|
|
- Insert into arrivals.
|
|
|
|
- After all arrivals computed, drop all raw positions for this bus from DB.
|