aboutsummaryrefslogtreecommitdiff
path: root/.idea/gtfs-book/ch-10-frequencies.md
blob: 45021ab9d8b47ad7da266a4d6c9e71665e85fb5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
## 10. Repeating Trips (frequencies.txt)

*This file is ***optional*** in a GTFS feed.*

In some cases a route may repeat a particular stopping pattern every few
minutes (picture a subway line that runs every 5 minutes). Rather than
including entries in `trips.txt` and `stop_times.txt` for every
single occurrence, you can include the trip once then define rules for
it to repeat for a period of time.

Having a trip repeat only works in the case where the timing between
stops remains consistent for all stops. Using `frequencies.txt`, you
use the relative times between stops alongside a calculated starting
time for the trip in order to determine the specific stop times.

| Field  | Required? | Description |
| :----- | :-------- | :---------- |
| `trip_id` | Required | The ID of the trip as it appears in `trips.txt` that is being repeated. A single trip can appear multiple times for different time ranges. |
| `start_time` | Required | The time at which a given trip starts repeating, in `HH:MM:SS` format. |
| `end_time` | Required | The time at which a given trip stops repeating, in `HH:MM:SS` format. |
| `headway_secs` | Required | The time in seconds between departures from a given stop during the time range. |
| `exact_times` | Optional | Whether or not repeating trips should be exactly scheduled. See below for discussion. |

### Sample Data

The following sample data is taken from Société de transport de Montréal
(STM) in Montreal
(<https://openmobilitydata.org/p/societe-de-transport-de-montreal>).

| `trip_id`                | `start_time` | `end_time` | `headway_secs` |
| :----------------------- | :----------- | :--------- | :------------- |
| 13S_13S_F1_1_2_0.26528   | 05:30:00     | 07:25:30   | 630            |
| 13S_13S_F1_1_6_0.34167   | 07:25:30     | 08:40:10   | 560            |
| 13S_13S_F1_1_10_0.42500  | 08:40:10     | 12:19:00   | 505            |
| 13S_13S_F1_1_7_0.58750   | 12:19:00     | 15:00:00   | 460            |
| 13S_13S_F1_1_11_0.66875  | 15:00:00     | 18:23:00   | 420            |
| 13S_13S_F1_1_5_0.78889   | 18:23:00     | 21:36:35   | 505            |

Each of the trips listed here have corresponding entries in
`trips.txt` and `stop_times.txt` (more on that shortly). This data
can be interpreted as follows.

* The first trip runs every 10m 30s from 5:30am until 7:25am.
* The second trip runs every 9m 20s from 7:25am until 8:40am, and so on.

The following table shows some of the stop times for the first trip
(`departure_time` is omitted here for brevity, since it is identical
to `arrival_time`).

| `trip_id`               | `stop_id` | `arrival_time` | `stop_sequence` |
| :---------------------- | :-------- | :------------- | :-------------- |
| 13S_13S_F1_1_2_0.26528 | 18        | 06:22:00       | 1               |
| 13S_13S_F1_1_2_0.26528 | 19        | 06:22:59       | 2               |
| 13S_13S_F1_1_2_0.26528 | 20        | 06:24:00       | 3               |
| 13S_13S_F1_1_2_0.26528 | 21        | 06:26:00       | 4               |

As this trip runs to the specified frequency, the specific times do not
matter. Instead, the differences are used. For the above stop times,
there is a 59 second gap between the first and second time, a 61 second
gap between the second and third, and a 120 second gap between the third
and fourth.

The stop times for the first frequency record (10.5 minutes apart) can
be calculated as follows.

* `05:30:00`, `05:30:59`, `05:32:00`, `05:34:00`
* `05:40:30`, `05:41:29`, `05:42:30`, `05:44:30`
* `05:51:00`, `05:51:59`, `05:53:00`, `05:55:00`
* ...
* `07:25:30`, `07:26:29`, `07:27:30`, `07:29:30`

### Specifying Exact Times

In the file definition at the beginning of this chapter there is an
optional field called `exact_times`. It may not be immediately clear
what this field means, so to explain it better, consider the frequency
definitions in the following table.

| `trip_id` | `start_time` | `end_time` | `headway_secs` | `exact_times` |
| :-------- | :----------- | :--------- | :------------- | :------------ |
| T1        | 09:00:00     | 10:00:00   | 300            | 0             |
| T2        | 09:00:00     | 10:00:00   | 300            | 1             |

These two frequencies are the same, with only the `exact_times` value
different. The first (`T1`) should be presented in a manner such as:

**"Between 9 AM and 10 AM this trip departs every 5 minutes."**

The second trip (`T2`) should be presented as follows:

**"This trip departs at 9 AM, 9:05 AM, 9:10 AM, ..."**

While ultimately the meaning is the same, this difference is used in
order to allow agencies to represent their schedules more accurately.
Often, schedules that convey to passengers that they will not have to
wait more than five minutes do so without having to explicitly list
every departure time.