本页面列出了实时公交 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_DATASETFeed。 | 将 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] 格式表示,单位为秒,从公元纪年开始计算)。 |