本页面列出了实时公交 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 时间戳正确表示 Feed 创建时间(从纪元起经过的秒数,采用世界协调时间 [UTC] 时区)。 |
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 的 %(value) 个trip_id
“%(trip_id)”无法与 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 |
行程“%(trip_id)”stop_id 为“%(stop_id)”且 stop_sequence 为 %(next_seq) 的StopTimeUpdate 到站时间比前一个 StopTimeUpdate (stop_id “%(other_id)”和 stop_sequence %(prev_seq))提前 %(value) 秒。 |
查看指定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 发车时间比上一个StopTimeUpdate 早 %(value) 秒,stop_id 为“%(other_id)”且%(prev_seq)为stop_sequence 。 |
查看给定 stop_id 或之前的出发时间。请更正不正确的值,以确保出发时间不会缩短。 |
DETOUR_MUST_SPECIFY_TIME |
行程“%(trip_id)”到经停点“%(stop_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 [如果存在] %(value)。 |
验证静态 Feed 的准确性。如果需要,请为行程修正 stop_times.txt 中 stop_id 的值。等待新版本的静态 Feed 上线。更新实时 Feed 中的 stop_id 引用。 |
INVALID_STOP_SEQUENCE_ID |
已舍弃StopTimeUpdate :行程“%(trip_id)”中的stop_sequence %(value) 无法与 GTFS Feed 匹配。 |
验证静态 Feed 的准确性。如果需要,请修正 stop_sequence 的值。等待新版静态 Feed 上线。更新实时 Feed 中的 stop_sequence 引用。 |
INVALID_TRIP_UPDATE_ORDER |
已舍弃StopTimeUpdate :trip_id “%(trip_id)”stop_id [如有]“%(stop_id)”“%(stop_id)”、stop_sequence %(prev_seq) 后跟 %(next_seq) 的stop_sequence 订单违规行为。 |
请务必按 stop_sequence 设置 StopTimeUpdates 的顺序。 |
FEED_TIMESTAMP_CONSISTENTLY_IN_THE_PAST |
Feed 时间戳始终是过去 %(diff_time) 秒 (%(difftime_string)) 的过去。 | 确认时间戳值采用世界协调时间 (UTC) 时区,以纪元后的秒数表示。确认您的服务器的时钟已同步,例如与 NTP 同步。请务必定期更新 Feed。 |
TIMESTAMP_MISSING |
Feed 的 FeedHeader 缺少 timestamp 字段。 |
以世界协调时间 (UTC) 时区为准,在纪元后的秒数中填写 FeedHeader 中的 timestamp 字段。时间戳需要正确表示 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 中移除 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 中移除 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_string)) 相比,VehiclePosition 时间戳 %(timestamp) (%(timestamp_string)) 是过去 %(diff_time) 秒 (%(difftime_string)) 的时间点。%(localtime) |
请从 Feed 中移除非服务车辆。验证时钟是否同步以及时区转换是否正确。 |
INVALID_ALERT_TIME_RANGE_END_PAST |
时间范围在超过 1 个月前结束:%(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),不支持 schedule_relationship 为 ADDED 的 TripDescriptor 。 |
仅使用 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 |
TripUpdate 的 delay 字段与 StopTimeUpdates 中的时间一起指定。 |
仅使用以下其中一项(而不是两者)提供时间信息:
|
INVALID_VEHICLE_POSITION_VEHICLE_ID_MISSING |
VehiclePosition 缺少车辆标识符。 |
提供车辆标识符。请确保在使用车辆的所有 Feed 版本中,此值都是稳定的。 |
INVALID_VEHICLE_POSITION_INVALID_POSITION |
VehiclePosition 缺少有效的位置信息。 |
为 latitude 和 longitude 字段提供有效值。 |
INVALID_VEHICLE_POSITION_TIMESTAMP_MISSING |
缺少 VehiclePosition 时间戳。 |
提供收集 VehiclePosition 信息的时间戳值(采用 UTC 时区格式,以从公元纪年开始计算的秒数表示)。 |