Руководство по GTFS Realtime

С помощью фида GTFS Realtime транспортные агентства могут в режиме реального времени сообщать клиентам о нарушениях в работе транспорта (закрытых станциях, перекрытых путях сообщения, задержках и т. п.), о местоположении транспортных средств и ожидаемом времени их прибытия.

На этом сайте описывается спецификация фида версии 2.0.

Используемые термины

Обязательно?

В спецификации GTFS Realtime версии 2.0 и выше в столбце Обязательно? указывается, какие поля должен заполнить отправитель фида, чтобы данные были действительными и правильно интерпретировались конечным приложением.

В столбце Обязательно? используются следующие значения:

  • Обязательно. Это поле в фиде GTFS Realtime должно быть заполнено.
  • Условно обязательно. Это поле должно быть заполнено при определенных условиях, перечисленных в столбце Описание. В остальных случаях это поле можно не заполнять.
  • Необязательно. Это поле фида можно не заполнять. Однако если данные доступны в системах автоматической геолокации транспортных средств (например, поле timestamp объекта VehiclePosition), то рекомендуется по возможности заполнять такие поля.

Обратите внимание, что в GTFS Realtime 1.0 не были заданы требования к семантике, поэтому фиды этой версии (gtfs_realtime_version = 1) могут им не соответствовать. Дополнительную информацию можно найти в предложении по добавлению требований к семантике.

Количество элементов

Количество – сколько элементов можно указать в поле. Возможные значения этого параметра:

Всегда проверяйте, что указано в столбцах Обязательно? и Описание, чтобы понимать, какие поля должны быть обязательно заполнены, а какие нет. Подробнее о количестве элементов Protocol Buffers рассказывается в документации по gtfs-realtime.proto.

Типы данных Protocol Buffers

Для описания элементов фида используются следующие типы данных Protocol Buffers:

  • message – комплексный тип;
  • enum – список фиксированных значений.

Экспериментальные поля

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

Указатель элементов

Элементы

message FeedMessage

Содержание сообщения фида. Каждое сообщение, полученное в потоке, является ответом на соответствующий HTTP-запрос методом GET. Фид GTFS Realtime и все идентификаторы его элементов всегда определяются относительно существующего GTFS-фида. Все идентификаторы элементов разрешаются относительно GTFS-фида.

Поля

Название поля Тип Обязательно? Количество элементов Описание
header FeedHeader Обязательно? Один Метаданные фида и его сообщения.
entity FeedEntity Условно обязательно Несколько Содержание фида. Если в системе общественного транспорта доступна информация в режиме реального времени, укажите ее здесь. Если это поле не заполнено, значит сведений, получаемых в режиме реального времени, нет.

message FeedHeader

Метаданные фида, включенные в сообщения фида.

Поля

Название поля Тип Обязательно? Количество элементов Описание
gtfs_realtime_version string Обязательно? Один Версия спецификации фида. Текущая версия – 2.0.
incrementality Incrementality Обязательно? Один
timestamp uint64 Обязательно? Один Временная метка, которая идентифицирует момент создания этого фида (по времени сервера). Используется POSIX-время (т. е. количество секунд с 1 января 1970 г. 00:00:00 (UTC)). Чтобы согласовать время в системах, передающих и получающих информацию в реальном времени, настоятельно рекомендуется получать timestamp с сервера. Можно использовать серверы уровня Stratum 3 и даже ниже, поскольку разница во времени в пределах нескольких секунд вполне допустима.

enum Incrementality

Определяет, является ли текущее обновление инкрементальным.

  • FULL_DATASET. При обновлении фида будут перезаписаны все предыдущие уточнения в реальном времени. Обновление должно содержать всю доступную информацию.
  • DIFFERENTIAL. В настоящее время этот режим не поддерживается, а поведение фидов, в которых он используется, не определено в спецификациях. Обсуждение DIFFERENTIAL ведется в списке рассылки GTFS Realtime. По окончании дискуссии документация будет обновлена.

Значения

Значение
FULL_DATASET
DIFFERENTIAL

message FeedEntity

Определение (или обновление) элемента в фиде. Если элемент не удаляется, то должно быть заполнено только одно поле: trip_update, vehicle или alert.

Поля

Название поля Тип Обязательно? Количество элементов Описание
id string Обязательно? Один Уникальный (в пределах фида) идентификатор этого элемента. Идентификаторы используются только для обеспечения инкрементальности. Фактические элементы фида должны быть указаны явным образом с помощью селекторов (см. EntitySelector ниже).
is_deleted bool Необязательно Один Показывает, должен ли этот элемент быть удален. Указывается только для фидов, в которых параметр Incrementality имеет значение DIFFERENTIAL. Этот параметр НЕ указывается для фидов, где для параметра Incrementality задано значение FULL_DATASET.
trip_update TripUpdate Условно обязательно Один Информация о задержках отправления в реальном времени. Хотя бы одно из полей trip_update, vehicle или alert должно быть заполнено – все три поля не могут быть пустыми.
vehicle VehiclePosition Условно обязательно Один Информация о местоположении транспортного средства, полученная в режиме реального времени. Хотя бы одно из полей trip_update, vehicle или alert должно быть заполнено – все три поля не могут быть пустыми.
alert Alert Условно обязательно Один Информация об оповещении в режиме реального времени. Хотя бы одно из полей trip_update, vehicle или alert должно быть заполнено – все три поля не могут быть пустыми.

message TripUpdate

Уточнения в режиме реального времени о продвижении транспортного средства по маршруту. Дополнительную информацию об уточнениях можно найти в статье Уточнения рейсов.

В зависимости от значения ScheduleRelationship переменная TripUpdate может обозначать:

  • рейс, который идет по графику;
  • рейс, который проходит по маршруту, но не имеет строгого расписания;
  • рейс, который был добавлен или удален в сравнении с расписанием.

Уточнения могут относиться к ожидаемому или уже имевшему место прибытию или отправлению. В большинстве случаев информация о прошедших событиях представляет собой измеренное значение, поэтому желательно, чтобы погрешность (поле uncertainty) была равна 0. Однако в некоторых случаях значение может быть неточным, поэтому для прошлых событий допускается погрешность, отличная от 0. Если погрешность не равна 0, значит или это расчетные данные по незавершенному рейсу, или измерение выполнено неточно, или это расчетные данные по уже имевшему место событию, информация о котором не была проверена.

Обратите внимание, что уточнение может содержать информацию о рейсе, который уже завершился. В этом случае достаточно уточнения по последней остановке рейса. Если время прибытия на конечную остановку уже прошло, это означает, что рейс был завершен (также можно указать сведения о предыдущих остановках, хотя это и несущественно). Этот вариант подходит для случаев, когда по расписанию рейс ещё должен выполняться, но фактически уже завершился. Если в такой ситуации вы удалите уточнение, то с точки зрения клиента это может означать, что рейс ещё выполняется. Учтите, что отправитель фида может удалять старые уточнения (хотя это не обязательно).

Поля

Название поля Тип Обязательно? Количество элементов Описание
trip TripDescriptor Обязательно? Один Рейс, к которому относится это сообщение. Для каждого рейса можно использовать не более одного элемента TripUpdate. Если таких элементов нет, значит и расчетных данных нет. Это не означает, что рейс идет по расписанию.
vehicle VehicleDescriptor Необязательно Один Дополнительная информация о транспортном средстве, выполняющем рейс.
stop_time_update StopTimeUpdate Условно обязательно Несколько Уточнения времени остановок (StopTimes) – как предстоящих, так и пройденных. Уточнения должны быть отсортированы по порядку остановок (stop_sequence) и применяются ко всем последующим остановкам рейса до очередного обновления stop_time_update. Хотя бы один параметр stop_time_update должен быть указан для всех рейсов, кроме тех, для которых в поле trip.schedule_relationship задано значение CANCELED. Если рейс отменен, параметр stop_time_updates не указывается.
timestamp uint64 Необязательно Один Время, когда определялось местоположение транспортного средства. Используется POSIX-время (т. е. количество секунд с 1 января 1970 г. 00:00:00 (UTC)).
delay int32 Необязательно Один Задержка – текущее отклонение рейса от расписания. Параметр delay необходим только в том случае, если ожидаемое время исчисляется относительно расписания, указанного в фиде GTFS.
Значение delay (в секундах) может быть положительным (опоздание) или отрицательным (опережение). Значение delay, равное 0, означает, что транспортное средство прибывает точно по расписанию.
Информация о задержке в полях StopTimeUpdates имеет более высокий приоритет, чем аналогичная информация на уровне рейса. Поэтому данные для рейса подставляются только там, где для остановок на пути следования не указано значение delay, равное StopTimeUpdate.
Настоятельно рекомендуется, чтобы отправители фидов заполняли поле TripUpdate.timestamp – в нем указывается, когда последний раз обновлялось значение delay. Это позволяет оценить актуальность данных.
Внимание! Это поле в настоящий момент является экспериментальным, и его поведение может меняться. В дальнейшем оно может быть изменено и добавлено в спецификацию.

message StopTimeEvent

Информация о времени одного ожидаемого события (прибытия или отправления). В этом сообщении указывается задержка и/или расчетное время, а также погрешность.

  • Параметр delay должен указываться, когда расчетное время исчисляется относительно расписания, указанного в фиде GTFS.
  • Параметр time должен указываться независимо от наличия расписания. Если указаны time и delay, то time имеет более высокий приоритет (хотя обычно, если значение time указано для запланированного рейса, оно должно быть равно времени по расписанию, указанному в GTFS, плюс задержка).

Погрешность применяется к времени и задержке и представляет собой приблизительное значение возможной ошибки при указании задержки (обратите внимание, что ее точное статистическое значение ещё не определено). Погрешность может быть равна 0, например при использовании системы компьютерного управления движением поездов.

Поля

Название поля Тип Обязательно? Количество элементов Описание
delay int32 Условно обязательно Один Значение delay (в секундах) может быть положительным (опоздание) или отрицательным (опережение). Значение delay, равное 0, означает движение точно по расписанию. В сообщении StopTimeEvent должен быть представлен параметр delay или time – оба поля не могут быть пустыми.
time int64 Условно обязательно Один Абсолютное время. Используется POSIX-время (т. е. количество секунд с 1 января 1970 г. 00:00:00 (UTC)). В сообщении StopTimeEvent должен быть представлен параметр delay или time – оба поля не могут быть пустыми.
uncertainty int32 Необязательно Один Погрешность. Если это поле пустое, погрешность неизвестна. Если прогноз абсолютно надежен, этот параметр равен 0.

message StopTimeUpdate

Уточненная информация о прибытии на остановку или отправлении с нее. Дополнительную информацию по этому вопросу можно найти в разделах TripDescriptor и Уточнения рейсов.

Уточнения могут относиться как к прошлым, так и к будущим событиям. Отправитель фида может сбрасывать уточнения о прошедших событиях. Остановка, к которой относится обновление, указывается в параметре stop_sequence или stop_id, поэтому одно из этих полей обязательно должно быть заполнено. Если один и тот же stop_id включен в рейс несколько раз, необходимо указывать последовательность остановок (stop_sequence) во всех обновлениях StopTimeUpdates для этого stop_id того же рейса.

Поля

Название поля Тип Обязательно? Количество элементов Описание
stop_sequence uint32 Условно обязательно Один Должен совпадать с одноименным параметром в файле stop_times.txt в соответствующем фиде GTFS. В сообщении StopTimeUpdate должен быть представлен параметр stop_sequence или stop_id – оба поля не могут быть пустыми. Значение stop_sequence обязательно для рейсов, которые проходят через остановку с идентификатором stop_id несколько раз (например, в замкнутом маршруте). Это необходимо для устранения неоднозначности.
stop_id string Условно обязательно Один Должен совпадать с одноименным параметром в файле stops.txt в соответствующем фиде GTFS. В сообщении StopTimeUpdate должен быть представлен параметр stop_sequence или stop_id – оба поля не могут быть пустыми.
arrival StopTimeEvent Условно обязательно Один Если поле schedule_relationship пустое или содержит значение SCHEDULED, то один из параметров arrival и departure должен быть указан в сообщении StopTimeUpdate – оба поля не могут быть пустыми. Поля arrival и departure могут быть оба пустыми, когда в поле schedule_relationship указано значение SKIPPED. Если в поле schedule_relationship указано значение NO_DATA, то поля arrival и departure должны быть пустыми.
departure StopTimeEvent Условно обязательно Один Если поле schedule_relationship пустое или содержит значение SCHEDULED, то один из параметров arrival и departure должен быть указан в сообщении StopTimeUpdate – оба поля не могут быть пустыми. Поля arrival и departure могут быть оба пустыми, когда в поле schedule_relationship указано значение SKIPPED. Если в поле schedule_relationship указано значение NO_DATA, то поля arrival и departure должны быть пустыми.
schedule_relationship ScheduleRelationship Необязательно Один Значение по умолчанию – SCHEDULED.

enum ScheduleRelationship

Показывает, как параметр StopTime связан с расписанием, указанным в статическом фиде GTFS.

Значения

Значение Примечание
SCHEDULED Последовательность остановок при движении транспортного средства соответствует расписанию, указанному в статическом фиде GTFS. При этом время прибытия и отправления может отличаться от указанного в расписании. Такой подход используется по умолчанию. По меньшей мере одно значение arrival и departure указывается для времени прибытия и отправления.
SKIPPED Пропуск остановки, т. е. транспортное средство не будет останавливаться в этом пункте. Значения arrival и departure можно не указывать.
NO_DATA Данных об этой остановке нет. Это означает, что уточняющая информация не предоставлена. Если в поле указано значение NO_DATA, такое же значение устанавливается и для последующих остановок. Поэтому такой метод рекомендуется использовать, чтобы указать, начиная с какой остановки у вас отсутствуют уточнения. Если задано значение NO_DATA, не указывается ни arrival, ни departure.

message VehiclePosition

Уточняющая информация о местоположении транспортного средства.

Поля

Название поля Тип Обязательно? Количество элементов Описание
trip TripDescriptor Необязательно Один Рейс, который выполняется на этом транспортном средстве. Может быть пустым или частично заполненным, если не удается сопоставить транспортное средство с рейсом.
vehicle VehicleDescriptor Необязательно Один Дополнительная информация о транспортном средстве, выполняющем рейс. В каждой записи должен использоваться уникальный идентификатор транспортного средства.
position Position Необязательно Один Положение транспортного средства в данный момент.
current_stop_sequence uint32 Необязательно Один Индекс текущей остановки в последовательности остановок. Значение current_stop_sequence определяется значением current_status. Если поле current_status не заполнено, предполагается, что транспортное средство находится в пути (IN_TRANSIT_TO).
stop_id string Необязательно Один Остановка, на которой находится транспортное средство. Значение должно быть таким же, как в файле stops.txt соответствующего фида GTFS.
current_status VehicleStopStatus Необязательно Один Точный статус транспортного средства относительно текущей остановки. Игнорируется, если параметр current_stop_sequence отсутствует.
timestamp uint64 Необязательно Один Время, когда определялось местоположение транспортного средства. Используется POSIX-время (т. е. количество секунд с 1 января 1970 г. 00:00:00 (UTC)).
congestion_level CongestionLevel Необязательно Один
occupancy_status OccupancyStatus Необязательно Один Заполненность транспортного средства.
Внимание! Это поле в настоящий момент является необязательным. В дальнейшем оно может быть изменено и добавлено в спецификацию.

enum VehicleStopStatus

Значения

Значение Примечание
INCOMING_AT Транспортное средство прибывает на остановку (обычно на табло строка с информацией о таком транспортном средстве начинает мигать).
STOPPED_AT Транспортное средство находится на остановке.
IN_TRANSIT_TO Транспортное средство отправилось с предыдущей остановки и находится в пути.

enum CongestionLevel

Уровень загруженности дорог на пути следования транспортного средства.

Значения

Значение
UNKNOWN_CONGESTION_LEVEL
RUNNING_SMOOTHLY
STOP_AND_GO
CONGESTION
SEVERE_CONGESTION

enum OccupancyStatus

Заполненность транспортного средства.

Внимание! Это поле пока используется как экспериментальное. В дальнейшем оно может быть изменено и добавлено в спецификацию.

Значения

Значение Примечание
EMPTY Транспортное средство считается пустым: на борту мало или вообще нет пассажиров. Посадка возможна.
MANY_SEATS_AVAILABLE В транспортном средстве или вагоне много свободных мест. Количество мест, которые должны быть свободными для применения этой категории, определяется по усмотрению отправителя фида.
FEW_SEATS_AVAILABLE В транспортном средстве или вагоне мало свободных мест. Количество мест, которые должны быть свободными для применения этой категории, определяется по усмотрению отправителя фида.
STANDING_ROOM_ONLY В транспортном средстве или вагоне есть только стоячие места.
CRUSHED_STANDING_ROOM_ONLY В транспортном средстве или вагоне есть только стоячие места, и их количество ограничено.
FULL Транспортное средство заполнено, но посадка возможна.
NOT_ACCEPTING_PASSENGERS Транспортное средство или вагон не принимает пассажиров. Обычно посадка пассажиров в транспортное средство или вагон разрешена.
NO_DATA_AVAILABLE Транспортное средство или вагон не предоставляет сведений о заполненности.
NOT_BOARDABLE Транспортное средство или вагон никогда не принимает пассажиров. Эта категория предназначена для особых транспортных средств и вагонов (локомотивов, служебно-технических вагонов и т. д.).

message Alert

Оповещение об инциденте в сети общественного транспорта.

Поля

Название поля Тип Обязательно? Количество элементов Описание
active_period TimeRange Необязательно Несколько Временной диапазон, в течение которого оповещение должно показываться пользователю. Если это поле пустое, то оповещение продолжит отображаться до тех пор, пока оно не будет удалено из фида. Можно указать несколько диапазонов.
informed_entity EntitySelector Обязательно? Несколько Элементы, подписчикам которых должно быть передано оповещение. По меньшей мере одно поле informed_entity должно быть заполнено.
cause Cause Необязательно Один
effect Effect Необязательно Один
url TranslatedString Необязательно Один URL, по которому можно найти дополнительную информацию об оповещении.
header_text TranslatedString Обязательно? Один Заголовок оповещения. Эта текстовая строка должна быть выделена, например полужирным шрифтом.
description_text TranslatedString Обязательно? Один Описание оповещения. Эта текстовая строка будет отформатирована как основной текст оповещения (или отображаться после раскрытия пользователем). Описание должно дополнять информацию, которая содержится в заголовке.

enum Cause

Причина оповещения.

Значения

Значение
UNKNOWN_CAUSE
OTHER_CAUSE
TECHNICAL_PROBLEM
STRIKE
DEMONSTRATION
ACCIDENT
HOLIDAY
WEATHER
MAINTENANCE
CONSTRUCTION
POLICE_ACTIVITY
MEDICAL_EMERGENCY

enum Effect

Как влияет эта проблема на данный элемент.

Значения

Значение
NO_SERVICE
REDUCED_SERVICE
SIGNIFICANT_DELAYS
DETOUR
ADDITIONAL_SERVICE
MODIFIED_SERVICE
OTHER_EFFECT
UNKNOWN_EFFECT
STOP_MOVED

message TimeRange

Временной интервал. Интервал считается активным в момент времени t, если t больше или равно времени start и меньше времени end.

Поля

Название поля Тип Обязательно? Количество элементов Описание
start uint64 Условно обязательно Один Время начала в исчислении POSIX (количество секунд с 1 января 1970 г. 00:00:00 (UTC)). Если оно не указано, интервал начинается с минус бесконечности. Если сообщение TimeRange есть в фиде, то необходимо указать start или end – оба поля не могут быть пустыми.
end uint64 Условно обязательно Один Время окончания в исчислении POSIX (количество секунд с 1 января 1970 г. 00:00:00 (UTC)). Если оно не указано, интервал заканчивается плюс бесконечностью. Если сообщение TimeRange есть в фиде, то необходимо указать start или end – оба поля не могут быть пустыми.

message Position

Географическое местоположение транспортного средства.

Поля

Название поля Тип Обязательно? Количество элементов Описание
latitude float Обязательно? Один В градусах северной широты, в системе координат WGS-84.
longitude float Обязательно? Один В градусах восточной долготы, в системе координат WGS-84.
bearing float Необязательно Один Направление в градусах по часовой стрелке от географического севера: 0 – север, 90 – восток и т. д. Это может быть направление по компасу либо направление к следующей остановке или промежуточному местоположению. Значение никак не связано с предыдущими местоположениями, которые можно вывести по ранее полученным данным.
odometer double Необязательно Один Значение одометра в метрах.
speed float Необязательно Один Мгновенная скорость, согласно приборам транспортного средства, в метрах в секунду.

message TripDescriptor

Дескриптор, который идентифицирует конкретный рейс в фиде GTFS.

Чтобы указать один рейс, нужно предоставить trip_id. Обычно этого достаточно. Однако в некоторых случаях необходимо указать дополнительные сведения:

  • Для рейсов, расписания которых определены в файле frequencies.txt, помимо trip_id необходимо указать также значения start_date и start_time.
  • Если рейс длится более 24 часов или задерживается так, что может накладываться на запланированный рейс в следующую дату, необходимо указать как start_date, так и trip_id.
  • Если вы не можете указать значение в поле trip_id, укажите значения для полей route_id, direction_id, start_date и start_time.

В обоих случаях, если вы указали route_id и trip_id, значение route_id должно быть таким же, как указано в поле route_id для этого рейса в файле trips.txt фида GTFS.

Поле trip_id нельзя использовать для идентификации нескольких рейсов как отдельно, так и в сочетании с другими полями TripDescriptor. Если TripDescriptor возвращает ноль или несколько рейсов вместо одного, это считается ошибкой. Элемент с ошибкой в поле TripDescriptor может игнорироваться клиентами.

Например, если рейс определен в файле frequencies.txt фида GTFS с указанием exact_times=0, то TripDescriptor никогда не должен указывать trip_id сам по себе. Дело в том, что, когда вы распознаете единственный рейс, который начинается в определенное время, необходимо также предоставить значение start_time.

Обратите внимание, что если параметр trip_id неизвестен, то идентификаторов последовательности остановок в TripUpdate недостаточно – нужно также задать значения в полях stop_id. Кроме того, необходимо указать абсолютное время прибытия и отправления.

Поля

Название поля Тип Обязательно? Количество элементов Описание
trip_id string Условно обязательно Один Параметр trip_id из фида GTFS, на который указывает этот селектор. Является ли параметр trip_id обязательным, зависит от типа рейса:
Нерегулярные рейсы. Значения в поле trip_id достаточно, чтобы однозначно идентифицировать рейс. Учтите, что нерегулярные рейсы не перечислены в файле frequencies.txt фида GTFS.
Регулярные рейсы. В таких случаях необходимо указать значения для полей trip_id, start_time и start_date. Регулярные рейсы перечислены в файле frequencies.txt фида GTFS.
Рейсы по расписанию. В таких случаях параметр trip_id может быть опущен, только если рейс можно однозначно идентифицировать по сочетанию параметров route_id, direction_id, start_time и start_date и все эти поля заполнены. Учтите, что рейсы по расписанию не перечислены в файле frequencies.txt фида GTFS.
route_id string Условно обязательно Один Параметр route_id из фида GTFS, на который указывает этот селектор. Если параметр trip_id опущен, то для идентификации рейса необходимо указать route_id, direction_id, start_time и schedule_relationship=SCHEDULED.
direction_id uint32 Условно обязательно Один Параметр direction_id из файла trips.txt в фиде GTFS, который указывает на направление движения. Если параметр trip_id опущен, необходимо указать direction_id.
Внимание! Это поле в настоящий момент является экспериментальным. В дальнейшем оно может быть изменено и добавлено в спецификацию.
start_time string Условно обязательно Один Время отправления, изначально указанное в расписании рейса. Формат значения в поле Time определяется его типом. Примеры: 11:15:35 или 25:15:35. Необходимость параметра start_time зависит от типа рейса:
Если trip_id обозначает рейс, который выполняется нерегулярно, поле start_time должно быть опущено или его значение должно совпадать со значением departure_time, указанным в файле stop_times.txt фида GTFS.
Если trip_id обозначает регулярный рейс, то поле start_time должно быть заполнено в сообщениях TripUpdate и VehiclePosition. Регулярные рейсы перечислены в файле frequencies.txt фида GTFS.
Если для регулярного рейса в фиде GTFS указано значение exact_times=1, то значение start_time должно равняться сумме значения start_time в файле frequencies.txt и значения headway_secs, умноженного на целый коэффициент (который может быть равен нулю).
Если для регулярного рейса в фиде GTFS указано значение exact_times=0, то значение параметра start_time может быть произвольным и обычно соответствует времени начала рейса. После того как параметр start_time для регулярного рейса (exact_times=0) установлен, он не должен меняться, даже если меняется время отправления (в таком случае можно использовать сообщение StopTimeUpdate).
Если параметр trip_id опущен, то поле start_time должно быть заполнено.
start_date string Условно обязательно Один Дата начала рейса в формате YYYYMMDD. Необходимость параметра start_date зависит от типа рейса:
Рейсы по расписанию. Значение start_date обязательно нужно предоставить. Это позволяет избежать путаницы, если рейс задерживается и отправление переносится на следующие сутки. Например, если поезд, который отправляется каждый день в 8:00 и 20:00, задержался на 12 часов, то время разных рейсов совпадет.
Примечание. Это поле можно не заполнять, если такие накладки исключены (например, рейсы выполняются ежечасно, но транспортное средство, опоздавшее на час, удаляется из расписания).
Регулярные рейсы. Значение start_date обязательно нужно предоставить. Учтите, что регулярные рейсы перечислены в файле frequencies.txt фида GTFS, а рейсов по расписанию там нет.
Если параметр trip_id опущен, необходимо указать start_date.
schedule_relationship ScheduleRelationship Необязательно Один Связь между рейсом и расписанием в статическом фиде GTFS. Если параметр TripDescriptor предоставлен в Alert EntitySelector, то поле schedule_relationship игнорируется клиентами, когда они идентифицируют соответствующий рейс.

enum ScheduleRelationship

Связь между рейсом и расписанием в статическом фиде GTFS. Если рейс выполняется по временному расписанию, не отраженному в GTFS, то он должен иметь пометку ADDED, а не SCHEDULED.

Значения

Значение Примечание
SCHEDULED Рейс, который выполняется в соответствии с расписанием GTFS или с незначительными отклонениями.
ADDED Дополнительный рейс, добавленный в расписание, например в случае возросшего пассажиропотока или замены вышедшего из строя транспортного средства.
UNSCHEDULED Рейс, выполняемый вне расписания. Эта пометка используется для идентификации рейсов, перечисленных в файле frequencies.txt GTFS, для которых установлено значение exact_times = 0. Ее не следует использовать для описания рейсов, которых нет в файле frequencies.txt или для которых в файле frequencies.txt установлено значение exact_times = 1.
CANCELED Рейс, удаленный из расписания.

message VehicleDescriptor

Информация, позволяющая идентифицировать транспортное средство, выполняющее рейс.

Поля

Название поля Тип Обязательно? Количество элементов Описание
id string Необязательно Один Идентификатор транспортного средства, используемый внутри агентства. Должен быть уникальным. Используется для отслеживания транспортного средства по мере его прохождения через систему. Идентификатор не должен быть виден конечному пользователю – для этого есть поле label.
label string Необязательно Один Видимое пользователям название, которое помогает найти нужное транспортное средство.
license_plate string Необязательно Один Номерной знак транспортного средства.

message EntitySelector

Селектор для элементов в фиде GTFS. Значения полей должны совпадать со значениями соответствующих полей в фиде GTFS. Должен быть указан хотя бы один спецификатор. Если указано несколько, их следует считать объединенными логическим оператором AND. Кроме того, сочетание спецификаторов должно соответствовать информации в фиде GTFS. Иными словами, чтобы к элементу в GTFS применялось оповещение, оно должно соответствовать всем заданным полям EntitySelector. Например, сообщение EntitySelector, которое включает поля route_id: "5" и route_type: "3", применяется только к автобусу route_id: "5" и не применяется к маршрутам route_type: "3". Если отправитель фида хочет применить оповещение и к route_id: "5", и к route_type: "3", ему необходимо предоставить два отдельных поля EntitySelector, одно из которых должно ссылаться на route_id: "5", а другое – на route_type: "3".

Необходимо указать хотя бы один спецификатор – все поля в сообщении EntitySelector не могут быть пустыми.

Поля

Название поля Тип Обязательно? Количество элементов Описание
agency_id string Условно обязательно Один Параметр agency_id из фида GTFS, на который указывает этот селектор.
route_id string Условно обязательно Один Параметр route_id из фида GTFS, на который указывает этот селектор. Если указан параметр direction_id, route_id является обязательным.
route_type int32 Условно обязательно Один Параметр route_type из фида GTFS, на который указывает этот селектор.
direction_id uint32 Условно обязательно Один Параметр direction_id из файла trips.txt в фиде GTFS, используемый для выбора всех рейсов в одном направлении для маршрута, заданного параметром route_id. Если указан параметр direction_id, route_id является обязательным.
trip TripDescriptor Условно обязательно Один Экземпляр рейса из фида GTFS, на который указывает этот селектор. Дескриптор TripDescriptor должен разрешаться в один рейс в данных GTFS (например, отправитель фида не может предоставить только trip_id для рейсов exact_times=0). Если поле ScheduleRelationship заполнено в дескрипторе TripDescriptor, клиенты будут игнорировать его при попытках определить рейс GTFS.
stop_id string Условно обязательно Один Параметр stop_id из фида GTFS, на который указывает этот селектор.

message TranslatedString

Сообщение, в котором содержатся URL для разных языков или переведенные версии текста. Из него будет выбрана одна строка. Процедура выбора определяется следующим образом: если язык интерфейса соответствует языковому коду перевода, то выбирается первый подходящий перевод. Если язык интерфейса по умолчанию соответствует языковому коду перевода, то выбирается первый подходящий вариант перевода. Если языковой код не указан для одного из вариантов перевода, то будет выбран этот вариант.

Поля

Название поля Тип Обязательно? Количество элементов Описание
translation Translation Обязательно? Несколько Необходимо предоставить хотя бы один перевод.

message Translation

Локализованная строка с языковым кодом.

Поля

Название поля Тип Обязательно? Количество элементов Описание
text string Обязательно? Один Строка с текстом в кодировке UTF-8.
language string Условно обязательно Один Код языка по стандарту BCP 47. Может быть опущен, если язык неизвестен или фид не локализован. Допустимо использовать не более одного варианта перевода без языкового кода.