借助 GTFS 实时 Feed,公交公司可以向消费者提供其车辆服务中断(站点停止运营、线路中断、重要延误等)以及车辆到达时间等实时信息。
本网站介绍了 2.0 版 Feed 规范,并对此进行了记录。
术语定义
必填
在 GTFS-realtime v2.0 及更高版本中,Required 列描述了提供方必须提供哪些字段,才能使公交数据有效且适用于使用方应用。
必填字段中使用了以下值:
- 必填:此字段必须由 GTFS 实时 Feed 提供方提供。
- 已有条件地要求:在特定条件下,此字段是必填字段,说明中对此进行了说明。除这些条件外,该字段是可选的。
- 可选:此字段为可选字段,制作者无需实现此字段。不过,如果底层车辆自动定位系统数据(例如,
VehiclePosition
timestamp
),建议提供方尽可能提供这些可选字段。
请注意,由于语义要求未在 GTFS-realtime 1.0 版中定义,因此 gtfs_realtime_version
为 1
的 Feed 可能不满足这些要求(如需了解详情,请参阅语义要求提案)。
基数
基数表示可以为特定字段提供的元素数量,其值如下:
- 一个 - 可以为此字段提供一个元素。这映射到协议缓冲区必需和可选的基数。
- 很多 - 可能会为此字段提供许多元素(0、1 或更多)。这映射到协议缓冲区重复基数。
请务必参考 Required 和 Description 字段,了解某个字段是必填字段、有条件必填字段或选填字段。如需了解协议缓冲区基数,请参阅 gtfs-realtime.proto
。
协议缓冲区数据类型
以下协议缓冲区数据类型用于描述 Feed 元素:
- message:复杂类型
- 枚举:固定值列表
实验性字段
标记为实验性的字段可能会发生变化,并且尚未正式纳入规范中。将来可以正式采用实验性字段。
元素索引
元素
message FeedMessage
Feed 消息的内容。流中的每条消息都是对相应 HTTP GET
请求的响应。实时 Feed 始终相对于现有 GTFS Feed 进行定义。所有实体 ID 都会根据 GTFS Feed 进行解析。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
header |
FeedHeader |
必填 | 1 | 有关此 Feed 和 Feed 消息的元数据。 |
entity |
FeedEntity |
在特定条件下必需 | 很多 | Feed 的内容。如果公交系统有实时信息,则必须提供此字段。如果此字段为空,使用方应假定没有可用于系统的实时信息。 |
message FeedHeader
有关 Feed 的元数据(包含在 Feed 消息中)。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
gtfs_realtime_version |
string |
必填 | 1 | Feed 规范的版本。当前版本为 2.0。 |
incrementality |
Incrementality |
必填 | 1 | |
timestamp |
uint64 |
必填 | 1 | 此时间戳用于标识此 Feed 内容的创建时间(以服务器时间为准)。POSIX 时间(即自世界协调时间 (UTC) 1970 年 1 月 1 日 00:00:00 以来的秒数)。为避免系统产生和消耗实时信息之间的时间偏差,强烈建议从时间服务器派生 timestamp 。我们完全可以使用 Stratum 3 甚至更低级别的分层服务器,因为时间差在几秒以内是可以接受的。 |
枚举增量
确定当前提取是否为增量提取。
FULL_DATASET
:此 Feed 更新将覆盖该 Feed 之前的所有实时信息。因此,此更新应该提供所有已知实时信息的完整快照。DIFFERENTIAL
:目前,此模式不受支持,并且使用此模式的 Feed 的行为未指定。GTFS 实时邮寄名单有关于全面指定DIFFERENTIAL
模式行为的讨论,当这些讨论最终确定后,文档将会更新。
值
值 |
---|
FULL_DATASET |
DIFFERENTIAL |
消息 FeedEntity
公交 Feed 中实体的定义(或更新)。如果该实体未被删除,则只能填充 trip_update
、vehicle
和 alert
字段中的一个字段。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
id |
string |
必填 | 1 | 此实体的 Feed 唯一标识符。这些 ID 仅用于提供增量支持。Feed 引用的实际实体必须由显式选择器指定(如需了解详情,请参阅下文的 EntitySelector )。 |
is_deleted |
bool |
可选 | 1 | 是否删除此实体。只能为 Incrementality 为 DIFFERENTIAL 的 Feed 提供此字段,不应为 Incrementality 为 FULL_DATASET 的 Feed 提供此字段。 |
trip_update |
TripUpdate |
在特定条件下必需 | 1 | 有关行程的实时出发延迟的数据。必须提供至少一个字段:trip_update 、vehicle 或 alert 。这些字段不得为空。 |
vehicle |
VehiclePosition |
在特定条件下必需 | 1 | 车辆的实时位置的相关数据。必须提供至少一个字段:trip_update 、vehicle 或 alert 。这些字段不得为空。 |
alert |
Alert |
在特定条件下必需 | 1 | 实时提醒的相关数据。必须提供至少一个字段:trip_update 、vehicle 或 alert 。这些字段不得为空。 |
消息 TripUpdate
实时了解车辆沿途进度。另请参阅行程更新实体的一般讨论。
根据 ScheduleRelationship
的值,TripUpdate
可以指定:
- 按时间表进行的行程。
- 沿途继续的行程,没有固定的时间表。
- 已添加或移除的行程。
此类更新针对的是未来的预计到达/出发事件,或者已发生的过往事件。在大多数情况下,过往事件的信息是测量值,因此不确定性值为 0
。不过,在某些情况下,即使这一点没有保留,因此对于过往事件,允许其不确定性值不同于 0
。如果更新的不确定性不是 0
,说明更新是针对尚未完成的行程的近似预测或衡量结果不准确,或者更新是针对过去在活动发生后未验证的过往预测。
请注意,更新可以描述已完成的行程。因此,只需提供行程的最后一个经停点的更新即可。如果到达最后一个经停点的时间是过去的时间,客户会认为整个行程都是过去的时间(但这也可以提供之前经停点的更新)。此选项与提前完成的行程相关度最高,但根据时间表,该行程当前仍在继续。移除此行程的更新可能会导致客户认为此行程仍在进行。请注意,Feed 提供商可以(但并非必须)完全清除过去的更新,但这在实践中非常有用。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
trip |
TripDescriptor |
必填 | 1 | 此消息适用的行程。每个实际行程实例最多只能有一个 TripUpdate 实体。如果没有,则表示没有预测信息。这不表示行程正在按计划进行。 |
vehicle |
VehicleDescriptor |
可选 | 1 | 有关此次行程所在车辆的更多信息。 |
stop_time_update |
StopTimeUpdate |
在特定条件下必需 | 很多 | 针对行程的 StopTimes (既包括未来数据,也包括预测数据,在某些情况下是过去数据文件,即已发生的事件)的更新记录。更新必须按 stop_sequence 排序,并应用于此次行程的所有后续站点,直到下一个指定 stop_time_update 。除非行程trip.schedule_relationship 为 CANCELED ,否则至少必须为该行程提供一个stop_time_update - 如果行程取消,则无需提供stop_time_updates 。 |
timestamp |
uint64 |
可选 | 1 | 准确测量车辆的实时进度的时刻。POSIX 时间(即自世界协调时间 (UTC) 1970 年 1 月 1 日 00:00:00 以来的秒数)。 |
delay |
int32 |
可选 | 1 | 行程的当前时间表偏差。只有当预测结果是针对 GTFS 中的一些现有时间表时,才应指定 delay 。delay (以秒为单位)可以是正值(表示车辆晚点)或负数(表示车辆领先进度)。delay 为 0 表示车辆准确准点。StopTimeUpdates 中的延迟信息先于行程级延迟信息,因此行程级延迟仅在指定 StopTimeUpdate delay 值的行程中传播。强烈建议 Feed 提供商提供 TripUpdate.timestamp 值,用于指明上次更新 delay 值的时间,以便评估数据的新鲜度。将来可能会被正式采用。 |
消息 StopTimeEvent
单个预测事件(到达或出发)的时间信息。时间包括延迟时间和/或预计时间以及不确定性。
- 根据 GTFS 中的某个现有时间表进行预测时,应使用
delay
。 - 应针对是否设置了预测时间表提供
time
。如果同时指定了time
和delay
,则以time
为准(尽管在预定的行程中,如果给定,则time
应该等于 GTFS + 延迟的预定时间)。
不确定性对时间和延迟同样重要。不确定性大致反映了实际延迟的预期误差(但请注意,我们尚未定义其确切的统计含义)。不确定性可能为 0
,例如受计算机时间控制的列车行驶。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
delay |
int32 |
在特定条件下必需 | 1 | delay 字段(以秒为单位)可以是正值(表示车辆晚点)或负数(表示车辆领先于进度)。delay 为 0 表示车辆正好准时。StopTimeEvent 中必须提供 delay 或 time ,两个字段均不得为空。 |
time |
int64 |
在特定条件下必需 | 1 | 事件为绝对时间。POSIX 时间(即自世界协调时间 (UTC) 1970 年 1 月 1 日 00:00:00 以来的秒数)。StopTimeEvent 中必须提供 delay 或 time ,两个字段均不得为空。 |
uncertainty |
int32 |
可选 | 1 | 如果省略不确定性,系统会将其视为未知。如需指定完全预测的内容,请将其不确定性设置为 0 。 |
消息 StopTimeUpdate
实时更新行程中给定停靠点的到达和/或出发事件。另请参阅 TripDescriptor
和行程更新实体文档中有关停止时间更新的一般讨论。
您可以为过去和未来的活动提供更新。提供方可以(但并非必须)丢弃过往事件。
更新会通过 stop_sequence
或 stop_id
与特定停靠站相关联,因此必须设置其中一个字段。如果同一 stop_id
在行程中被多次访问,那么针对该行程该stop_id
的所有 StopTimeUpdates
都应提供 stop_sequence
。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
stop_sequence |
uint32 |
在特定条件下必需 | 1 | 必须与相应的 GTFS Feed 中的 stop_times.txt 相同。StopTimeUpdate 中必须提供 stop_sequence 或 stop_id ,两个字段均不得为空。对于需要多次访问同一 stop_id (例如循环)的行程,必须使用 stop_sequence 来消除歧义,以便停止预测。 |
stop_id |
string |
在特定条件下必需 | 1 | 必须与相应的 GTFS Feed 中的 stops.txt 相同。StopTimeUpdate 中必须提供 stop_sequence 或 stop_id ,两个字段均不得为空。 |
arrival |
StopTimeEvent |
在特定条件下必需 | 1 | 如果 schedule_relationship 为空或 SCHEDULED ,必须在 StopTimeUpdate 中提供 arrival 或 departure - 这两个字段都不能为空。当 schedule_relationship 为 SKIPPED 时,arrival 和 departure 可能都为空。如果 schedule_relationship 为 NO_DATA ,则 arrival 和 departure 必须为空。 |
departure |
StopTimeEvent |
在特定条件下必需 | 1 | 如果 schedule_relationship 为空或 SCHEDULED ,必须在 StopTimeUpdate 中提供 arrival 或 departure - 这两个字段都不能为空。当 schedule_relationship 为 SKIPPED 时,arrival 和 departure 可能都为空。如果 schedule_relationship 为 NO_DATA ,则 arrival 和 departure 必须为空。 |
schedule_relationship |
ScheduleRelationship |
可选 | 1 | 默认关系为 SCHEDULED 。 |
枚举 ScheduleRelation
此 StopTime
与静态时间表之间的关系。
值
值 | 评论 |
---|---|
SCHEDULED |
这辆车是按照其静态停留站行驶的(尽管不一定是按照时间表的时间计算)。这是默认行为。必须提供至少 arrival 和 departure 中的一个。 |
SKIPPED |
系统会跳过该停车点,也就是说,车辆不会在此经停点停止。arrival 和 departure 字段为可选字段。 |
NO_DATA |
没有此经停点的数据。表示没有可用的实时信息。设置 NO_DATA 后,后续传播将会传播,因此建议您使用此方式来指定自己没有哪个实时信息。设置 NO_DATA 时,不应同时提供 arrival 和 departure 。 |
message VehiclePosition
给定车辆的实时位置信息。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
trip |
TripDescriptor |
可选 | 1 | 此车辆正在运营的行程。如果系统无法在给定的行程实例中识别车辆,则可留空或部分匹配。 |
vehicle |
VehicleDescriptor |
可选 | 1 | 有关此次行程所在车辆的更多信息。每个条目都应具有唯一车辆 ID。 |
position |
Position |
可选 | 1 | 这辆车的当前位置。 |
current_stop_sequence |
uint32 |
可选 | 1 | 当前车站的停止序列索引。current_stop_sequence 的含义(即它所指的经停点)由 current_status 确定。如果 current_status 缺失,系统会假定 IN_TRANSIT_TO 。 |
stop_id |
string |
可选 | 1 | 标识当前车站。该值必须与相应 GTFS Feed 中 stops.txt 的值相同。 |
current_status |
VehicleStopStatus |
可选 | 1 | 车辆相对于当前车站的确切状态。如果缺少 current_stop_sequence ,系统会忽略此参数。 |
timestamp |
uint64 |
可选 | 1 | 测量车辆位置的时刻。POSIX 时间(即自世界协调时间 (UTC) 1970 年 1 月 1 日 00:00:00 以来的秒数)。 |
congestion_level |
CongestionLevel |
可选 | 1 | |
occupancy_status |
OccupancyStatus |
可选 | 1 | 车辆的载客率。 注意:此字段仍为实验性字段,随时可能会有更改。将来可能会被正式采用。 |
枚举 VehicleStopStatus
值
值 | 评论 |
---|---|
INCOMING_AT |
车辆即将到达经停点(在停车显示屏上,车辆标志通常闪烁)。 |
STOPPED_AT |
车辆站在经停点。 |
IN_TRANSIT_TO |
车辆已从上一个经停点出发,正在运输中。 |
枚举 CongestionLevel
影响这辆车的拥塞程度。
值
值 |
---|
UNKNOWN_CONGESTION_LEVEL |
RUNNING_SMOOTHLY |
STOP_AND_GO |
CONGESTION |
SEVERE_CONGESTION |
枚举 OccupancyStatus
车辆的载客率。
注意:此字段仍为实验性字段,可能会发生变化。将来可能会被正式采用。
值
值 | 评论 |
---|---|
EMPTY |
对于大多数车辆,这辆车被视为空置,只有极少或完全没有乘客,但仍会接受乘客。 |
MANY_SEATS_AVAILABLE |
车辆或车厢很大比例可用。在可被视为这一类别的席位总数中,免费席位的数量应由制作人自行决定。 |
FEW_SEATS_AVAILABLE |
车辆或车厢提供一小部分座椅。在可被视为属于此类别的席位总数中,免费席位的数量应由制作人自行决定。 |
STANDING_ROOM_ONLY |
车辆或车厢目前仅支持站立乘客。 |
CRUSHED_STANDING_ROOM_ONLY |
车辆或车厢目前只能容纳站立的乘客,但它们的空间有限。 |
FULL |
大多数车辆都会视车辆已满,但可能仍允许乘客上车。 |
NOT_ACCEPTING_PASSENGERS |
车辆或车厢不接受乘客。车辆或车厢通常接受乘客上车。 |
NO_DATA_AVAILABLE |
车辆或车厢当时没有任何乘车数据。 |
NOT_BOARDABLE |
车辆或车厢不可入住,且不接受乘客。适用于特殊交通工具或引擎(引擎、保养车厢等)。 |
消息提醒
一条提醒,指示公交网络中的某种突发事件。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
active_period |
TimeRange |
可选 | 很多 | 应向用户显示提醒的时间。如果缺失,只要 Feed 中显示了提醒,系统就会显示提醒。如果指定了多个范围,则在所有区域中都将显示提醒。 |
informed_entity |
EntitySelector |
必填 | 很多 | 我们应向其用户通知此提醒的实体。必须提供至少一个 informed_entity 。 |
cause |
Cause |
可选 | 1 | |
effect |
Effect |
可选 | 1 | |
url |
TranslatedString |
可选 | 1 | 提供警报相关信息的网址。 |
header_text |
TranslatedString |
必填 | 1 | 提醒的标头。此纯文本字符串将会突出显示(例如以粗体显示)。 |
description_text |
TranslatedString |
必填 | 1 | 提醒的说明。此纯文本字符串会采用提醒正文(或会在用户的明确“展开”请求中显示)。说明中的信息应添加到标头的信息中。 |
枚举原因
此提醒的原因。
值
值 |
---|
UNKNOWN_CAUSE |
OTHER_CAUSE |
TECHNICAL_PROBLEM |
STRIKE |
DEMONSTRATION |
ACCIDENT |
HOLIDAY |
WEATHER |
MAINTENANCE |
CONSTRUCTION |
POLICE_ACTIVITY |
MEDICAL_EMERGENCY |
枚举效果
此问题对受影响实体的影响。
值
值 |
---|
NO_SERVICE |
REDUCED_SERVICE |
SIGNIFICANT_DELAYS |
DETOUR |
ADDITIONAL_SERVICE |
MODIFIED_SERVICE |
OTHER_EFFECT |
UNKNOWN_EFFECT |
STOP_MOVED |
message TimeRange
时间间隔。如果 t
大于或等于 start
时间且小于 end
时间,则该时间间隔会被视为在 t
时有效。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
start |
uint64 |
在特定条件下必需 | 1 | 开始时间,以 POSIX 时间(即,自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数)表示。如果缺失,则间隔时间从负无穷大开始。如果提供了 TimeRange ,则必须提供 start 或 end - 这两个字段都不能为空。 |
end |
uint64 |
在特定条件下必需 | 1 | 结束时间,以 POSIX 时间(即,自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数)表示。如果缺失,则间隔时间以加无穷大为结尾。如果提供了 TimeRange ,则必须提供 start 或 end - 这两个字段都不能为空。 |
message 位置
车辆的地理位置。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
latitude |
float |
必填 | 1 | 北方(WGS-84 坐标系)度数。 |
longitude |
float |
必填 | 1 | 东经,位于 WGS-84 坐标系中。 |
bearing |
float |
可选 | 1 | 与正北顺时针方向的角(以度为单位),即0 为北,90 为东。可以是罗盘方向方向,也可以是前往下一个经停点或中间位置的方向。不应根据之前位置的顺序推断出来,而客户端可以根据之前的数据计算以往的位置。 |
odometer |
double |
可选 | 1 | 里程表值(以米为单位)。 |
speed |
float |
可选 | 1 | 车辆的瞬间速度,以每秒米为单位。 |
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
必须与 GTFS trips.txt
文件中分配给指定行程的 route_id
字段匹配。
trip_id
字段本身不能或其他 TripDescriptor
字段结合使用来标识多个行程实例。如果 TripDescriptor
解析为零个或多个行程实例,而不是一个行程实例,则会被视为错误。包含错误 TripDescriptor
的实体可能会被使用方舍弃。
例如,当在 GTFS frequencies.txt
中使用 exact_times=0
定义行程时,TripDescriptor
绝不能单独指定 trip_id
。这是因为,当您解析从一天中特定时间开始的单个行程实例时,您还必须提供 start_time
。
请注意,如果 trip_id
未知,那么 TripUpdate
中的电台序列 ID 是不够的,还必须提供 stop_id
字段。此外,必须提供绝对到达和出发时间。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
trip_id |
string |
在特定条件下必需 | 1 | 此选择器引用的 GTFS Feed 中的 trip_id 。是否需要 trip_id 取决于行程类型:• 非基于频率的行程:仅凭 trip_id 字段即可唯一标识这些行程。请注意,GTFS frequencies.txt 中未定义基于非频次的行程。• 基于频率的行程: trip_id 、start_time 和 start_date 字段都是必填字段。基于频率的行程在 GTFS frequencies.txt 中定义。• 基于时间表的行程:只有当所提供的 route_id 、direction_id 、start_time 和 start_date 字段的组合能够唯一标识相应行程时,才能省略 trip_id 字段。请注意,GTFS frequencies.txt 中未定义预定行程。 |
route_id |
string |
在特定条件下必需 | 1 | 此选择器引用的 GTFS Feed 中的 route_id 。如果省略 trip_id ,则必须将 route_id 、direction_id 、start_time 和 schedule_relationship=SCHEDULED 全部设置为识别某个行程实例。 |
direction_id |
uint32 |
在特定条件下必需 | 1 | GTFS Feed trips.txt 文件中的 direction_id ,指示行程方向。如果省略 trip_id ,则必须提供 direction_id 。注意:此字段仍为实验性字段,随时可能会发生变化。将来可能会被正式采用。 |
start_time |
string |
在特定条件下必需 | 1 | 此行程实例最初安排的开始时间。字段类型 Time 定义此字段的格式,例如 11:15:35 或 25:15:35。start_time 字段是否为必填字段取决于行程类型:• trip_id 对应于非基于频率的行程:需要省略 start_time 字段或等于 GTFS Feed 的 stop_times.txt 文件中的 departure_time 值。• trip_id 对应于基于频率的行程: start_time 必须始终为行程更新和车辆位置指定。基于频率的行程在 GTFS frequencies.txt 中定义。➤ 如果基于频率的行程对应于 exact_times=1 GTFS 记录:在相应时间段内,start_time 字段必须是大于 frequencies.txt start_time 的 headway_secs 的倍数(包括零)。➤ 基于频率的行程与 exact_times=0 GTFS 记录对应:start_time 可以是任意类型,最初预计为行程的首次出发。这种基于频率的exact_times=0 行程的start_time 确定后,即使第一个出发时间发生变化,也会被视为不可变。任何后续的时间更改都可以反映在 StopTimeUpdate 消息中。• trip_id 已省略:必须提供 start_time 。 |
start_date |
string |
在特定条件下必需 | 1 | 此行程实例的开始日期,格式为 YYYYMMDD 。是否需要start_date 取决于哪种类型的行程:• 已安排的行程:必须提供 start_date 。这是为了明确区分时间太晚,以致于与第二天安排的行程冲突的行程。例如,假设火车在每天 8:00 和 20:00 发车。如果火车晚点 12 小时,将会预约同一时间的不同行程。注意:对于无法进行此类冲突的已安排行程,此字段为选填字段。例如,如果某服务按小时运行,且车辆晚点一小时后不再被视为与时刻表相关,就可能会发生这种情况。 • 基于频率的行程:必须提供 start_date 。请注意,基于频率的行程在 GTFS frequencies.txt 文件中定义,而预定的行程则不是。• 省略了 trip_id :必须提供 start_date 。 |
schedule_relationship |
ScheduleRelationship |
可选 | 1 | 此行程与静态时刻之间的关系。如果 Alert EntitySelector 中提供了 TripDescriptor ,使用方在标识匹配的行程实例时会忽略 schedule_relationship 字段。 |
枚举 ScheduleRelation
此行程与静态时刻之间的关系。如果行程是根据临时时间表完成的,而不会反映在 GTFS 中,则不应标记为 SCHEDULED
,而应标记为 ADDED
。
值
值 | 评论 |
---|---|
SCHEDULED |
根据 GTFS 时间表运行的行程,或行程时间接近于已安排的行程时间。 |
ADDED |
在跑步时间表之外添加了额外的行程,例如更换损坏的车辆或响应突然的乘客负载。 |
UNSCHEDULED |
正在运行的行程,但没有关联的时间表 - 此值用于标识包含 exact_times = 0 的 GTFS frequencies.txt 中定义的行程。它不能用于说明未在 GTFS frequencies.txt 中定义的行程,也不能用于描述 GTFS frequencies.txt 中带有 exact_times = 1 的行程。 |
CANCELED |
时间表中存在但已移除的行程。 |
message VehicleDescriptor
执行行程的车辆的识别信息。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
id |
string |
可选 | 1 | 车辆的内部系统识别。对每辆车而言,应该是唯一的,并用于在车辆通过系统时跟踪车辆。不得向最终用户显示此 ID;为此,请使用 label 字段。 |
label |
string |
可选 | 1 | 可供用户查看的标签,例如必须帮助乘客识别的车辆。 |
license_plate |
string |
可选 | 1 | 车辆的车牌。 |
消息 EntitySelector
GTFS Feed 中实体的选择器。这些字段的值应与 GTFS Feed 中的相应字段相对应。必须提供至少一个说明符。如果提供了多个参数,则应该被解释为由逻辑 AND
运算符联接。此外,说明符的组合必须与 GTFS Feed 中的相应信息保持一致。换句话说,要让提醒应用于 GTFS 中的实体,该实体必须与提供的所有 EntitySelector
字段相匹配。例如,包含字段 route_id: "5"
和 route_type: "3"
的 EntitySelector
仅适用于 route_id: "5"
总线,而不适用于 route_type: "3"
的任何其他路由。如果生产方希望将提醒应用于 route_id: "5"
以及 route_type: "3"
,则应提供两个单独的 EntitySelector
字段,一个引用 route_id: "5"
,另一个引用 route_type: "3"
。
必须提供至少一个说明符 - EntitySelector
中的所有字段都不能为空。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
agency_id |
string |
在特定条件下必需 | 1 | 此选择器引用的 GTFS Feed 中的 agency_id 。 |
route_id |
string |
在特定条件下必需 | 1 | 此选择器引用的 GTFS 中的 route_id 。如果提供了 direction_id ,还必须提供 route_id 。 |
route_type |
int32 |
在特定条件下必需 | 1 | 此选择器引用的 GTFS 中的 route_type 。 |
direction_id |
uint32 |
在特定条件下必需 | 1 | 来自 GTFS Feed trips.txt 文件的 direction_id ,用于为路线选择一个方向的所有行程(由 route_id 指定)。如果提供了 direction_id ,还必须提供 route_id 。 |
trip |
TripDescriptor |
在特定条件下必需 | 1 | 此选择器引用的 GTFS 中的行程实例。此 TripDescriptor 必须解析为 GTFS 数据中的单个行程实例(例如,生产方不能只为 exact_times=0 行程提供 trip_id )。如果在此 TripDescriptor 内填充了 ScheduleRelationship 字段,消费者在尝试识别 GTFS 行程时将忽略该字段。 |
stop_id |
string |
在特定条件下必需 | 1 | 此选择器引用的 GTFS Feed 中的 stop_id 。 |
message TranslatedString
国际化消息,包含每种语言的文本片段或网址。系统会提取消息中的某个字符串。解决方法如下:如果界面语言与翻译的语言代码匹配,系统会选择第一个匹配的翻译。如果默认界面语言(例如,系统会匹配译文的语言代码,系统会选择第一个匹配的译文。如果某些翻译语言未指定语言代码,系统就会选择该翻译。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
translation |
Translation |
必填 | 很多 | 必须提供至少一种译文。 |
message 翻译
映射到语言的本地化字符串。
字段
字段名称 | 类型 | 必需 | 基数 | 说明 |
---|---|---|---|---|
text |
string |
必填 | 1 | 包含消息的 UTF-8 字符串。 |
language |
string |
在特定条件下必需 | 1 | BCP-47 语言代码。如果语言未知,或者 Feed 没有任何国际化,则可以省略。最多只能有一种翻译包含未指定的语言标记 - 如果有多个翻译,则必须提供语言。 |