本页面列出了实时公交 Feed 的验证错误和警告,以及有关如何排查这些问题的提示。
实时验证错误
为向乘客提供准确的信息,请务必修正实时 Feed 中的所有验证错误。
如需调试实时验证错误,请使用下表中的信息。
- “枚举值”列提供实时 Feed 中问题的简称,该简称会显示在公交合作伙伴信息中心的验证报告中。
- “错误消息”列提供公交合作伙伴信息中心验证报告中显示的消息。它会对错误进行总结。
- “问题排查提示”列提供了解决错误所需执行的主要步骤。
枚举值 | 错误消息 | 问题排查提示 |
---|---|---|
PROTO_MISSING_FIELDS_ERROR |
二进制协议缓冲区缺少字段 %(field)。 | 在文本编辑器中打开该文件,并验证 Feed 是否包含 FeedMessage 协议缓冲区中标记为必填的所有字段。 |
PROTO_ASCII_ERROR |
无法解析 ASCII 协议缓冲区。错误:%(field)。 | 在文本编辑器中打开该文件,并验证 Feed 是否包含所有必填字段并使用正确的语法。 |
PROTO_PARSE_ERROR |
无法解析二进制协议缓冲区。 | 在文本编辑器中打开该文件,并验证 Feed 是否可以解析为 FeedMessage 。您可以在Feed 示例中找到代码示例。 |
URL_DNS_ERROR |
网址存在 DNS 错误。 | 检查互联网连接和 DNS 设置。 |
FETCHER_CONNECTION_ERROR |
未能连接到网址。 | 验证您提供用于提取的网址。请确保网址正确无误。 |
CUSTOM_PARSE_ERROR |
未能解析自定义格式 Feed:%(value_string) | 在文本编辑器中验证文件内容。确认文件生成正确且在传输过程中未损坏。如果错误仍然存在,请与您的 Google 公交代表联系以寻求帮助。 |
FEED_TOO_OLD |
Feed 时间戳 %(timestamp) (%(timestamp_string)) 已过 %(diff_time) 秒 (%(difftime_string))。当前时间为 %(localtime) (%(localtime_string))。Feed 已被舍弃。 | 验证系统是否报告了有关提取 Feed 的其他问题。定期生成 Feed 并确保数据保持最新状态。确保 Feed 时间戳正确表示从公元纪年 (UTC 时区) 起算的 Feed 创建时间(以秒为单位)。 |
FETCHER_HTTP_ERROR |
HTTP 错误:%(value)。 | 验证返回的 HTTP 错误代码,并相应地调查问题。 |
FULL_DATASET_REQUIRED |
仅支持 FULL_DATASET Feed。 |
将 incrementality 的值设置为 FULL_DATASET 。 |
FEED_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE |
Feed 时间戳始终比当前时间提前 %(diff_time) 秒 (%(difftime_string))。 | 请务必以世界协调时间 (UTC) 时区提供时间戳,以自公元纪年以来经历的秒数表示。检查服务器的时钟,确保它们都已同步(例如通过 NTP)。 |
INVALID_TIMESTAMP_RANGE |
Feed 时间戳值超出范围 (%(timestamp))。 | 提供 Feed 时间戳,表示自公元纪年起到 Feed 创建时间经过的秒数(采用世界协调时间 [UTC])。 |
PROTO_ENCODING_UNKNOWN |
未知的 Feed 编码。 | 使用正确的编码来配置 Feed。最终 Feed 需要采用二进制格式,但您可以使用 ASCII 格式进行测试。 |
VEHICLE_POSITION_INTERNAL_ERROR |
%(trip_id) 的 VehiclePosition 转换为 TripUpdate 失败,并返回了通用错误“%(value_string)”。 |
此错误表示 VehiclePosition 未用于估算 TripUpdate 。请与您的 Google 公交代表联系以寻求帮助。 |
实时验证警告
为提高 Feed 数据质量,请务必解决表明您的实时 Feed 可能存在问题的验证警告。
如需调试实时验证警告,请搜索下表中的条目。
- “枚举值”列提供实时 Feed 中问题的简称,该简称会显示在公交合作伙伴信息中心的验证报告中。
- “警告或信息消息”列会显示公交合作伙伴信息中心验证报告中显示的消息。它会总结警告或信息。
- “问题排查提示”列会提供解决警告所需执行的主要步骤。
枚举值 | 警告或信息消息 | 问题排查提示 |
---|---|---|
TRIP_UPDATE_SOME_STU_NOT_MATCHED |
有效 StopTimeUpdates 指定的 trip_id “%(trip_id)”的 %(value) 无法与 GTFS 行程匹配。例如,位置:%(index) stop_sequence:%(next_seq) stop_id :“%(stop_id)”。 |
确保以正确的顺序提供 StopTimeUpdates 。 |
VEHICLE_POSITION_DUPLICATE_TRIP_BLOCK_TRANSFER |
由多辆车辆报告的街区转移行程 $(trip_id) 和 start_time
$(timestamp_string)。 |
确保在特定开始时间只有一辆车代表一趟行程。 |
INVALID_ALERT_ROUTE_NOT_MATCHED |
提醒已舍弃:route_id “%(route_id)”无法与 GTFS Feed 匹配。 |
验证静态时间表是否正确,并在缺少路线信息时添加路线信息。新静态时间表生效后,请更正实时 Feed 中的 route_id 参考。 |
INVALID_ALERT_STOP_NOT_MATCHED |
提醒已舍弃:stop_id “%(stop_id)”无法与 GTFS Feed 匹配。 |
验证静态时间表是否正确,并在缺少相应信息时添加相应经停点信息。新静态时间表生效后,请更正实时 Feed 中的 stop_id 参考。 |
INVALID_ALERT_TRIP_NOT_MATCHED |
提醒已舍弃:trip_id “%(trip_id)”无法与 GTFS Feed 匹配。 |
验证静态时间表是否正确,并在缺少行程信息时添加行程信息。新静态时间表生效后,请更正实时 Feed 中的 trip_id 参考。 |
STOP_TIME_UPDATE_PREMATURE_ARRIVAL |
stop_id “%(stop_id)”和 stop_sequence
%(next_seq) 的“%(trip_id)”行程的 StopTimeUpdate 到达时间比之前的 stop_id “%(other_id)”和 stop_sequence %(prev_seq) 的 StopTimeUpdate 提前了 %(value) 秒。 |
查看给定 stop_id 或之前的 stop_id 的到达时间和出发时间。修正不正确的值,以确保时间不会缩短。 |
INVALID_ALERT_NO_INFORMED_ENTITIES |
应提供至少一个已获知实体。 | 在提醒中添加相关 informed_entity 。 |
PROTO_ENCODING_MISMATCH |
配置的 proto 编码与收到的编码不同。 | 以正确的格式提供 Feed。如果问题仍然存在,请与您的 Google 公交代表联系以寻求帮助。 |
STOP_TIME_UPDATE_PREMATURE_DEPARTURE |
stop_id 为“%(stop_id)”且 stop_sequence 为 %(next_seq) 的“%(trip_id)”行程的 StopTimeUpdate 出发时间比之前的 stop_id 为“%(other_id)”且 stop_sequence 为 %(prev_seq) 的 StopTimeUpdate 提前了 %(value) 秒。 |
查看给定 stop_id 或之前的 stop_id 的出发时间。修正了错误的值,以确保出发时间不会减少。 |
DETOUR_MUST_SPECIFY_TIME |
通过经停点“%(stop_id)”绕行的行程“%(trip_id)”必须指定绝对时间。 | 请提供受影响 stop_id 中指定 trip_id 的确切时间。 |
ENTITY_MUST_HAVE_ALERTS |
实体必须包含警报。 | 验证 Feed 内容是否完整,以及每条 FeedEntity 消息是否包含服务提醒相关信息。 |
ENTITY_MUST_HAVE_POSITIONS |
实体必须具有位置。 | 验证 Feed 内容是否完整,以及每条 FeedEntity 消息是否包含车辆位置信息。 |
ENTITY_MUST_HAVE_UPDATES |
实体必须包含行程更新。 | 验证 Feed 内容是否完整,以及每条 FeedEntity 消息是否包含有关行程更新的信息。 |
TIMESTAMP_FUTURE |
Feed 时间戳 %(timestamp) (%(timestamp_string)) 比未来时间提前 %(diff_time) 秒 (%(difftime_string))。使用获取时间戳 %(localtime) (%(localtime_string))。 | 请务必以世界协调时间 (UTC) 时区提供时间戳,以自公元纪年以来经历的秒数表示。检查服务器的时钟,确保它们都已同步(例如通过 NTP)。 |
TIMESTAMP_PAST |
Feed 时间戳 %(timestamp) (%(timestamp_string)) 比当前时间晚了 %(diff_time) 秒 (%(difftime_string))。使用获取时间戳 %(localtime) (%(localtime_string))。 | 更频繁地重新生成实时 Feed,即使内容保持不变或为空也是如此。 |
NO_VALID_TEXT |
“%(field)”字段没有有效的翻译。 | 查看 TranslatedString 消息并修复所有相关问题,例如 HTML_TAGS_FOUND 、INVALID_URL_LENGTH 、INVALID_TEXT_LENGTH 和 INVALID_URL 。 |
HTML_TAGS_FOUND |
字段 %(field)(%(index)) 包含 HTML 标记。 | 从字段中移除所有 HTML 标记。 |
INVALID_LANGUAGE |
字段 %(field)(%(index)) 的语言代码“%(language)”无效。 | 将语言字段设置为有效的 BCP-47 语言代码。 |
INVALID_URL |
字段 %(field)(%(index)) 中的网址无效(应为绝对 http 或 https)。 | 请附上提醒的有效网址。 |
INVALID_TEXT_LENGTH |
字段 %(field)(%(index)) 的长度为 %(length)(上限为 %(max_length))。 | 缩短提供的文本,这些文本通常会显示在小屏幕上,例如手机。如果您想向用户提供更多详细信息,请改为提供网址引用。 |
INVALID_URL_LENGTH |
字段 %(field)(%(index)) 的网址长度为 %(length)(上限为 %(max_length))。 | 请提供符合限制的网址。 |
MULTIPLE_UNSPECIFIED_LANGUAGE |
%(field)(%(index)) 字段是重复的翻译,未设置语言。 | 查看 TranslatedString 消息。为提供了多个译文的 language 字段设置正确的值。 |
INVALID_TRIP_UPDATE_DELAY |
行程更新中的延迟时间无效:%(value)。 | 检查给定 entity_id 的 delay 字段,并修正不正确的值。 |
INVALID_TRIP_UPDATE_EVENT_TIME |
停止事件时间无效:%(timestamp)。 | 仅针对正在进行或即将发生的行程添加 TripUpdates 。 |
INVALID_TRIP_UPDATE_DEPARTURE_NO_TIME |
未为出发提供 time 或 delay 。 |
在每个 StopTimeEvent 消息中添加 time 字段和/或 delay 字段。如果没有可用的信息,请省略 departure 字段。 |
INVALID_TRIP_UPDATE_ARRIVAL_NO_TIME |
未为到达时间提供 time 或 delay 。 |
在每个 StopTimeEvent 消息中添加 time 字段和/或 delay 字段。如果没有可用的信息,请省略 arrival 字段。 |
MISSING_CONTENT_AND_EFFECT |
无有效内容或特效。 | 将 effect 、header_text 或 description_text 添加到提醒中。如果没有可用信息,请改为移除 alert 。 |
CUSTOM_PARSE_WARNING |
解析自定义格式 Feed 时部分失败:%(value_string) | 此错误表示无法解析实时 Feed 的一部分。打开文本编辑器以验证 Feed 的内容,或重新上传 Feed。如果错误仍然存在,请与您的 Google 公交代表联系以寻求帮助。 |
VEHICLE_POSITION_BAD_START_TIME |
指定的行程 $(trip_id) 开始时间距离车辆实际启动时间相差 %(diff_time) 秒。 | 指定接近行程实际开始时间的车辆开始时间。 |
INVALID_TRIP_UPDATE_INCONSISTENT_IDS |
stop_sequence %(value) 与行程“%(trip_id)”的停靠点“%(stop_id)”不匹配。使用静态索引中的 stop_sequence
%(next_seq) 替换它。 |
确保 stop_sequence 字段的值正确无误,并且与当前静态 Feed 中相同 stop_id 和 trip_id 的 stop_sequence 相匹配。 |
INVALID_STOP_STOP_ID |
StopTimeUpdate 已舍弃:为行程“%(trip_id)”指定的stop_id “%(stop_id)”无法与 GTFS Feed 匹配。
stop_sequence [if present] %(value)。 |
验证静态 Feed 的准确性。如果需要,请为行程在 stop_times.txt 中固定 stop_id 的值。等待新版静态 Feed 发布。更新实时 Feed 中的 stop_id 引用。 |
INVALID_STOP_SEQUENCE_ID |
StopTimeUpdate 已舍弃:stop_sequence %(value) %(trip_id) 行程中的“%(trip_id)”无法与 GTFS Feed 匹配。 |
验证静态 Feed 的准确性。根据需要,修正 stop_sequence 的值。等待新版静态 Feed 发布。更新实时 Feed 中的 stop_sequence 引用。 |
INVALID_TRIP_UPDATE_ORDER |
StopTimeUpdate 已舍弃:stop_sequence 违反了以下顺序:trip_id “%(trip_id)”stop_id [如果有]“%(stop_id)”stop_sequence %(prev_seq) 后跟 %(next_seq)。 |
请务必使用 stop_sequence 设置 StopTimeUpdates 的顺序。 |
FEED_TIMESTAMP_CONSISTENTLY_IN_THE_PAST |
Feed 时间戳始终比实际时间晚 %(diff_time) 秒 (%(difftime_string))。 | 确认时间戳值采用 UTC 时区,以从公元纪年开始计算的秒数表示。确认服务器的时钟是否已同步(例如通过 NTP)。请务必定期更新 Feed。 |
TIMESTAMP_MISSING |
Feed 的 FeedHeader 缺少 timestamp 字段。 |
在 FeedHeader 中填写 timestamp 字段,以世界协调时间 (UTC) 为时区,以自纪元起的秒数表示。时间戳需要正确表示 Feed 生成时间。 |
ENTITY_MORE_THAN_ONCE |
FeedEntity 的 ID 在 Feed 中出现多次。 |
确保 Feed 中的所有实体 ID 都是唯一的。 |
PROTO_ASCII_HAS_BOM |
提供的 Feed 以字节顺序标记 (BOM) 开头。 | 移除字节顺序标记。确保采用文本格式的协议缓冲区采用 UTF-8 编码且不带 BOM。我们建议您改为以二进制格式提供协议缓冲区。 |
TRIP_UPDATE_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE |
某些行程更新的 timestamp 始终提前 %(diff_time) 秒 (%(difftime_string))。 |
确认 timestamp 值的格式为 UTC 时区,以从公元纪年开始计算的秒数表示。确认服务器的时钟是否已同步(例如通过 NTP)。从 Feed 中移除已完成超过 1 小时的行程的 TripUpdates 。 |
VEHICLE_POSITION_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE |
时间戳始终比当前时间提前 %(diff_time) 秒 (%(difftime_string))。 | 确认 timestamp 值的格式为 UTC 时区,以从公元纪年开始计算的秒数表示。确认服务器的时钟是否已同步(例如通过 NTP)。 |
VEHICLE_POSITION_TIMESTAMP_CONSISTENTLY_IN_THE_PAST |
timestamp 始终落后 %(diff_time) 秒 (%(difftime_string))。 |
确认 timestamp 值的格式为 UTC 时区,以从公元纪年开始计算的秒数表示。确认服务器的时钟是否已同步(例如通过 NTP)。从 Feed 中移除已完成超过 1 小时的行程的 VehiclePositions 。 |
UNKNOWN_TRIP_ID |
静态 GTFS Feed 中未知行程 ID“%(trip_id)”。 | 验证静态 Feed,确保其包含正确且最新的信息。
确保使用的是正确的静态 Feed 版本,或根据需要上传正确的版本。在 TripDescriptor 中提供现有且准确的 trip_id 。 |
TRIP_OUTSIDE_SERVICE_WINDOW |
ID 为“%(trip_id)”的行程在指定时间未提供服务。 | 验证静态 Feed 的准确性。如果缺少行程信息,请添加。等到新版静态 Feed 生效。更正实时 Feed 中的 trip_id 参考。 |
AMBIGUOUS_TRIP_DESCRIPTOR |
TripDescriptor 不明确,无法解析特定时间的单次行程。 |
如果行程基于频次,请务必在 TripDescriptor 中提供有效的 start_time 值和 start_date 值。 |
INVALID_TRIP_UPDATE_FUTURE_TIMESTAMP |
与 Feed 时间戳 %(localtime) (%(localtime_string)) 相比,TripUpdate 时间戳 %(timestamp) (%(timestamp_string)) 提前了 %(diff_time) 秒 (%(difftime_string))。 |
验证时钟源是否设置了正确的时间。验证是否准确执行了任何时区转换。Vehicle.Position.timestamp 字段需要采用世界协调时间 (UTC) 时区格式,以从公元纪年开始计算的秒数表示。 |
INVALID_VEHICLE_POSITION_FUTURE_TIMESTAMP |
与 Feed 时间戳 %(localtime) (%(localtime_string)) 相比,VehiclePosition 时间戳 %(timestamp) (%(timestamp_string)) 提前了 %(diff_time) 秒 (%(difftime_string))。 |
验证时钟源是否设置了正确的时间。验证是否准确执行了任何时区转换。Vehicle.Position.timestamp 字段需要采用 UTC 时区格式,以从公元纪年开始计算的秒数表示。 |
INVALID_VEHICLE_POSITION_STALE_TIMESTAMP |
与 Feed 时间戳 %(localtime) (%(localtime_string)) 相比,VehiclePosition 时间戳 %(timestamp) (%(timestamp_string)) 要晚 %(diff_time) 秒 (%(difftime_string))。 |
从 Feed 中移除已停用的车辆。验证时钟是否已同步,以及时区转换是否正确。 |
INVALID_ALERT_TIME_RANGE_END_PAST |
结束时间超过一个月的时间范围:%(time_end)。 | 移除结束时间已过且不再有效的提醒(或 active_periods )。 |
INVALID_ALERT_TIME_RANGE_ORDER |
时间范围顺序相反:(%(time_start), %(time_end))。 | 验证 active_period 字段的值。这些字段的顺序可能会相反。 |
INVALID_ALERT_TIME_RANGE_START_FUTURE |
时间范围的开始时间晚于现在一年:%(time_start)。 | 在提醒中添加近期的 active_period 开始时间。 |
STOP_TIME_AND_DELAY_MISMATCH |
在相应经停点“%(stop_id)”处,行程“%(trip_id)”指定了时间戳 %(timestamp) 和延迟时间 %(delay),这两个值相互矛盾。将延迟时间设置为 %(value)。 | 验证实时 Feed 是否与当前有效的静态 Feed 相符。确保 StopTimeEvent 中的 delay 字段和 time 字段正确无误且一致。或者,完全省略 delay 字段,改为仅提供 time 字段。 |
INVALID_START_DATE |
行程“%(trip_id)”的开始日期“%(value_string)”无效(假设为今天)。预期格式为“YYYYMMDD”。 | 验证指定行程的 start_date 值。确保该值正确无误。 |
INVALID_START_TIME |
行程“%(trip_id)”的开始时间“%(value_string)”无效。预期格式为“HH:MM:SS”。 | 验证指定行程的 start_time 的值和格式。确保值和格式正确无误。 |
VEHICLE_POSITION_DUPLICATE_TRIP |
行程 $(trip_id) 和 start_time $(timestamp_string)
由多辆车辆报告。 |
更改行程的 start_time ,并将 ScheduleRelationship 更改为 ADDED (对于非基于频次的行程)。 |
VEHICLE_POSITION_CONVERTED_TO_ADDED |
行程 $(trip_id) 时间表关系已更改为 ADDED 行程。 |
此错误是另一个问题的副作用。请先解决该问题,然后再解决此错误。 |
INVALID_TRIP_UPDATE_MISSING_IDS |
行程更新包含 stop_update ,但不含 stop_sequence 或 stop_id 。 |
在 StopTimeUpdate 消息中添加 stop_id 和/或 stop_sequence 。 |
MULTIPLE_ENTITIES_PER_TRIP |
行程更新已舍弃:表示与 ID 为 %(value_string) 的其他实体具有相同开始时间的相同 trip_id “%(trip_id)”。 |
确保每个实际行程最多只有一个 TripUpdate 。
确保 TripDescriptor 在 Feed 中是唯一的。 |
INVALID_TRIP_UPDATE_MISSING_CONTENT |
对安排的 trip_id “%(trip_id)”的更新应至少指定一条包含数据的停靠点时间更新或指定延迟时间。 |
提供以下任一信息:
|
TRIP_UPDATE_SUSPICIOUS_DELAY |
trip_id “%(trip_id)”的行程包含令人怀疑的不合理延迟时间 %(difftime_string)。 |
验证 TripDescription 是否已明确定义,它需要包含 trip_id 、start_date 和 start_time 。验证 StopTimeUpdates 的时间值是否与指定的行程相符。检查是否存在任何时区不匹配问题,例如 start_date 和 start_time 是否采用本地时区,但 FeedMessage 中的所有整数时间字段均采用从公元纪年开始计算的秒数。 |
TRIP_UPDATE_OBSOLETE |
trip_id “%(trip_id)”行程已于 %(difftime_string) 前结束。 |
在行程到达终点几分钟后,从 Feed 中移除行程。 |
UNSUPPORTED_ADDED_WITH_BLOCK_TRANSFER |
不支持为包含分块传输的行程 %(trip_id) 创建 TripDescriptor ,且 schedule_relationship 为 ADDED 。 |
仅使用 ScheduleRelationship 的 ADDED 值来指示孤岛式行程。 |
UNSUPPORTED_ADDED_WITHOUT_TIMES |
TripDescriptor 的 schedule_relationship 为 ADDED ,表示行程 %(trip_id) 未指定时间。 |
提供 start_date 和 start_time ,以指明添加的行程的开始时间。 |
TRIP_UPDATE_TOO_OLD |
TripUpdate 时间戳 %(timestamp) (%(timestamp_string)) 比当前时间晚了 %(diff_time) 秒 (%(difftime_string))。当前时间为 %(localtime) (%(localtime_string))。TripUpdate 已舍弃。 |
定期生成 Feed 并确保数据保持最新状态。确保 TripUpdate 时间戳正确无误(以从公元纪年起算的秒数表示),并采用 UTC 时区格式。在行程到达终点几分钟后,从 Feed 中移除行程。 |
INVALID_TRIP_UPDATE_DELAY_USAGE |
StopTimeUpdates 中与时间一起指定的 TripUpdate 的 delay 字段。 |
请仅使用以下任一项(而非两者)提供时间信息:
|
INVALID_VEHICLE_POSITION_VEHICLE_ID_MISSING |
VehiclePosition 缺少车辆标识符。 |
提供车辆标识符。确保此值在车辆处于服务状态的所有 Feed 版本中保持稳定。 |
INVALID_VEHICLE_POSITION_INVALID_POSITION |
VehiclePosition 缺少有效的位置信息。 |
为 latitude 和 longitude 字段提供有效值。 |
INVALID_VEHICLE_POSITION_TIMESTAMP_MISSING |
缺少 VehiclePosition 时间戳。 |
提供 VehiclePosition 信息收集时间的时间戳值(以世界协调时间 [UTC] 格式表示,单位为秒,从公元纪年开始计算)。 |