Уточнения рейсов отражают изменения в расписании. Подразумевается, что по всем рейсам в вашем графике движения, поддерживающим передачу данных в реальном времени, в Google будут поступать уточнения. В них должно указываться предполагаемое время прибытия или отправления на остановках по маршруту. Кроме того, уточнения используются в более сложных ситуациях, например при добавлении или отмене рейсов, а также при изменении маршрутов.
Примечание. В GTFS рейс – это последовательность из двух или более остановок, где транспортное средство останавливается в определенное время.
Для каждого рейса в расписании может применяться не более одного уточнения. Если к рейсу не применяется уточнение, то подразумевается, что для него недоступны данные в реальном времени. Это не означает, что рейс выполняется точно по расписанию.
Уточнение времени остановок
Уточнения рейса могут включать в себя одно или несколько уточнений времени остановок транспортного средства (StopTimeUpdate
) – как предстоящих, так и уже выполненных. Данные о выполненных остановках можно сбрасывать, однако не следует делать этого для остановок, выполненных с опережением расписания, если время по расписанию ещё не наступило. В этом случае система посчитает, что для таких остановок уточнений StopTimeUpdate
нет.
Допустим, фид GTFS Realtime содержит следующую информацию:
- Остановка 4: прогнозируемое время прибытия – 10:18, по расписанию – 10:20 (на 2 минуты раньше).
- Остановка 5: прогнозируемое время прибытия – 10:30, по расписанию – 10:30 (вовремя).
Прогнозируемое время прибытия на остановку 4 нельзя удалять из фида до 10:21, даже если автобус отъехал от нее в 10:18. Если уточнение StopTimeUpdate
для остановки 4 (прибытие по расписанию в 10:20) удалить из фида в 10:18 или 10:19, приложение на стороне потребителя посчитает, что данные в реальном времени для остановки недоступны, и возьмет значения из расписания в GTFS.
Все значения StopTimeUpdate
привязаны к остановкам (обычно для привязки используются переменные stop_sequence
или stop_id
в GTFS). Однако если в уточнении не указан trip_id
(следовательно, нет значения у stop_sequence
), то вам потребуется добавить в него переменную stop_id
. Параметр stop_id
должен ссылаться на stop_id
из GTFS. Если один и тот же stop_id
включен в рейс несколько раз, необходимо указывать последовательность остановок (stop_sequence
) во всех сообщениях StopTimeUpdate
для этого stop_id
того же рейса.
Точное время прибытия на остановку (arrival
) и отправления с нее (departure
) можно указывать в уточнениях StopTimeUpdate
с помощью StopTimeEvent
.
При этом значение может быть как абсолютным (time
– время), так и относительным (delay
– задержка в секундах относительно времени, указанного в расписании). Значение delay
можно задавать, только если для рейса в GTFS задано расписание (а не периодичность движения), в виде "время по расписанию + задержка". Кроме того, вместе с StopTimeEvent
можно указать uncertainty
(см. ниже).
По умолчанию каждому уточнению StopTimeUpdate
присваивается статус scheduled
(по расписанию). Обратите внимание, что для рейса используется другая переменная со статусом, обозначающим отклонение от расписания. Уточнению можно присвоить статус skipped
(пропущено), если транспортное средство пропускает остановку, или no data
(нет данных), если для остановки нет данных в реальном времени.
Уточнения необходимо отсортировать по значениям переменной stop_sequence
(или по stop_ids
– в том порядке, в котором выполняются остановки).
Значение уточнения применяется ко всем последующим остановкам, для которых нет собственных уточнений. Другими словами, изменение времени для одной остановки отразится на всех последующих.
Пример 1
Рассмотрим рейс с 20 остановками. Допустим, что для stop_sequence
текущей остановки пришло уточнение StopTimeUpdate
о том, что задержка отправления и прибытия (StopTimeEvent
) равна 0
. Это означает, что транспортное средство движется точно по расписанию.
Пример 2
Для того же рейса поступило три уточнения StopTimeUpdate
:
- задержка в 300 секунд для остановки
stop_sequence
3; - задержка в 60 секунд для остановки
stop_sequence
8; - задержка без указания продолжительности для остановки
stop_sequence
10.
Эти значения будут интерпретированы следующим образом:
- остановки
stop_sequence
1, 2 – задержка неизвестна; - остановки
stop_sequence
3, 4, 5, 6, 7 – задержка 300 секунд; - остановки
stop_sequence
8, 9 – задержка 60 секунд; - остановки
stop_sequence
10–20 – задержка неизвестна.
TripDescriptor
Переменная TripDescriptor содержит информацию о задержке рейса относительно расписания. Возможны следующие варианты:
Значение | Описание |
---|---|
Scheduled |
Рейс выполняется в соответствии с расписанием в GTFS или с незначительными отклонениями. |
Added |
Это дополнительный рейс, которого не было в расписании (например, он был добавлен в связи с возросшим пассажиропотоком или взамен вышедшего из строя транспортного средства). |
Unscheduled |
Рейс выполняется без привязки к расписанию (например, челночные перевозки). |
Canceled |
Рейс указан в расписании, но был отменен. |
В большинстве случаев в уточнении необходимо указывать trip_id
рейса из расписания в GTFS.
Использование повторяющихся trip_id
Для маршрутов, рейсы которых привязаны не к расписанию, а к определенной периодичности (задается с помощью файла frequencies.txt
), в фидах можно использовать повторяющиеся trip_id
. В этом и подобных случаях trip_id
не является уникальным идентификатором рейса, поскольку он не связан с конкретным временем.
Чтобы уникально определять такие рейсы в дескрипторе TripDescriptor
, необходимо указать три идентификатора:
trip_id
start_time
start_date
Первым требуется опубликовать идентификатор start_time
(во всех последующих уточнениях необходимо указывать то же значение start_time
, что и в начале). StopTimeUpdate
используются для корректировки. Значение start_time
не обязательно должно совпадать с фактическим временем отправления рейса от первой остановки, однако не может сильно от него отличаться.
Допустим, 25 мая в 10:00 вы решаете, что рейс с trip_id=T
отправится в start_time=10:10:00
, а в 10:01 публикуете эту информацию в фиде GTFS-realtime. В 10:05 вы узнаёте, что рейс отправится не в 10:10, а в 10:13. В новом фиде этот рейс по-прежнему будет идентифицирован как (T, 2015-05-25, 10:10:00)
, однако в уточнении StopTimeUpdate
для него будет задано другое время отправления с первой остановки (10:13:00).
Другие способы идентификации рейсов
Рейсы, которые не выполняются с определенной периодичностью, можно также идентифицировать в дескрипторе TripDescriptor
с помощью следующего набора идентификаторов:
route_id
direction_id
start_time
start_date
Здесь start_time
соответствует времени начала рейса согласно расписанию. Необходимо, чтобы комбинация параметров для каждого рейса была уникальной.
Интервал неопределенности
Интервал неопределенности уточнения StopTimeUpdate
может применяться как к значению времени, так и к значению задержки.
Он указывает, на сколько секунд может отличаться время задержки от указанного в фиде (обратите внимание, что точное статистическое значение этого показателя ещё не определено). Погрешность может быть равна 0
, например при использовании системы компьютерного управления движением поездов.
Допустим, междугородный автобус с расчетной задержкой в 15 минут прибывает на следующую остановку в 4-минутном интервале (то есть с отклонением +/- 2 минуты). В этом случае uncertainty
равно 240
.