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

Уточнения используются для передачи информации об отклонении рейсов от расписания. Подразумевается, что они должны поступать для всех рейсов с поддержкой передачи данных в реальном времени. В уточнениях содержится информация о предполагаемом времени прибытия или отправления от остановок по маршруту. Кроме того, уточнения используются для более сложных сценариев, в частности для отмены и удаления рейсов, а также изменения их маршрутов движения.

Напоминание. В 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, ссылающуюся на значение из GTFS. Если рейс проходит несколько раз через одну и ту же остановку, во всех уточнениях StopTimeUpdates вместе со stop_id этой остановки необходимо указывать переменную stop_sequence.

Точное время прибытия на остановку и отправления от нее можно указывать в уточнениях StopTimeUpdate с помощью переменной StopTimeEvent. Значение может быть как абсолютным (время), так и относительным (разница в секундах со временем, указанным в расписании). Относительное значение нельзя указывать для рейсов, у которых в GTFS вместо расписания задана лишь периодичность движения. Кроме того, для StopTimeEvent можно задать интервал неопределенности (см. ниже).

По умолчанию каждому уточнению StopTimeUpdate присваивается статус scheduled (по расписанию). Обратите внимание, что для рейса используется другая переменная со статусом, обозначающим отклонение от расписания. Уточнению можно присвоить статус skipped (пропущено), если транспортное средство пропускает остановку, или no data (нет данных), если для остановки нет данных в реальном времени.

Уточнения необходимо отсортировать по значениям переменной stop_sequence (или по stop_id – в том порядке, в котором выполняются остановки).

Значение уточнения применяется ко всем последующим остановкам, для которых нет собственных уточнений. Другими словами, изменение времени для одной остановки отразится на всех последующих.

Пример 1

Рассмотрим рейс с 20 остановками. Допустим, что для текущей на данный момент остановки пришло уточнение StopTimeUpdate о том, что задержка отправления и прибытия (StopTimeEvent) равна 0. Это означает, что рейс выполняется по расписанию.

Пример 2

Для того же рейса поступило три уточнения StopTimeUpdate:

  • задержка в 300 секунд для остановки stop_sequence 3;
  • задержка в 60 секунд для остановки stop_sequence 8;
  • задержка без указания продолжительности для остановки stop_sequence 10.

Эти значения будут интерпретированы следующим образом:

  • остановки stop_sequences 1, 2 – задержка неизвестна;
  • остановки stop_sequences 3, 4, 5, 6, 7 – задержка 300 секунд;
  • остановки stop_sequences 8, 9 – задержка 60 секунд;
  • остановки stop_sequences 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 (в последующих уточнениях StopTimeUpdate необходимо всегда указывать то же самое значение start_time, что и в начале). Значение 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 для него будет задано другое время отправления от первой остановки.

Другие способы идентификации рейсов

Рейсы, которые не выполняются с определенной периодичностью, можно также идентифицировать в дескрипторе TripDescriptor с помощью следующего набора идентификаторов:

  • route_id;
  • direction_id;
  • start_time;
  • start_date.

Здесь start_time соответствует времени начала рейса согласно расписанию. Необходимо, чтобы комбинация параметров для каждого рейса была уникальной.

Интервал неопределенности

Интервал неопределенности уточнения StopTimeUpdate может применяться как к значению времени, так и к значению задержки. Он указывает, на сколько секунд может отличаться время задержки от указанного в фиде (обратите внимание, что точное статистическое значение этого показателя ещё не определено). Интервал неопределенности может быть равным 0 (например, для полностью автоматизированных транспортных систем).

Допустим, что междугородный автобус с плановой задержкой в 15 минут прибывает на следующую остановку в интервале 4 минут (то есть с отклонением +/- 2 минуты от рассчитанного). В этом случае интервал неопределенности равен 240.