Уточнения рейсов

Уточнения рейсов отражают изменения в расписании. Подразумевается, что по всем рейсам в вашем графике движения, поддерживающим передачу данных в реальном времени, в 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.