
本文档介绍了使用 Road Selection API 为 Roads Management Insights (RMI) 产品定义 SelectedRoutes 的最佳实践。正确定义 SelectedRoutes 是确保您获得可靠且准确的流量数据(针对您打算监控的路段)的最关键步骤。 如需查看完整的技术概览,请参阅官方的 Road Selection API 文档。
SelectedRoute 创建的核心原则
在定义用于监控的 SelectedRoute 时,您应遵循以下原则,以确保 SelectedRoute 的准确性和数据有效性。
1. 专门针对路边广告
SelectedRoute 应表示单个出行方向。对于有中央分隔带的分隔式高速公路或道路,您应为每个方向分别创建一个单独的 SelectedRoute 对象(例如,一个用于北向,一个用于南向)。 确保您的出发地、目的地和所有中间途经点都位于道路的正确一侧,以便监控您所需的行驶方向。如果起点或目的地位于分隔式高速公路的错误一侧,可能会导致意外的 SelectedRoutes 或数据错误。
2. 处理多层道路和立交桥
在具有多个层级的复杂道路(例如堆叠的高速公路、天桥、复杂的立交桥)上,单个纬度和经度对可能不明确,并可能导致路线“贴靠”到错误的层级。为防止出现这种情况,您应使用中间途经点将路线引导到正确的路段和级别。添加一个或多个途经点可确保路线完全符合您的意图。
3. 定义有效的起点和终点
SelectedRoute 不能在隧道内开始或结束。SelectedRoute 的起点和终点应位于露天位置。支持遍历隧道的 SelectedRoutes,但监控路段本身不能在隧道内开始或结束。

4. 定义合适的路线长度
SelectedRoute 非常灵活,可以在各种规模下定义:
- 短路线:SelectedRoute 可以小到单个街区,这有助于在城市地区进行精细分析。
- 统一路线:您可以定义距离相等的 SelectedRoutes(例如,每 0.5 英里),以实现一致的报告。
- 长路线:SelectedRoute 可以覆盖长而连续的路段。 此方法非常适合监控整个高速公路走廊或重要交叉路口之间的主要干道。
选择最符合您的监控和分析需求的 SelectedRoute 长度。
5. 识别具有垂直分离的道路路段(隧道、高架桥、桥梁等)
使用经纬度坐标定义路段时,务必要考虑以下情况:多个路段占据相同的二维地理空间,但在垂直方向上是分开的。这种情况通常发生在隧道、高架桥、天桥和桥梁等结构中。仅依赖经度和纬度而不考虑海拔高度可能会导致 SelectedRoute 选择和导航出现不准确的情况。例如,穿过隧道的道路与上方地面上的路段具有相同的俯视纬度和经度。同样,天桥或桥梁将与下方的道路共享水平坐标。 如果未能区分这些垂直堆叠的路段,可能会导致路线规划系统错误地将流量引导至较低级别的道路(本应引导至较高级别的道路),反之亦然。
在此示例中,位于波士顿 (42.362347, -71.055935) 的 Big Dig 是一个巨大的隧道。

当我们把途经点放在道路上时,即使其确切地理坐标存在细微的不精确,也可能会导致路线计算结果大相径庭。这种对途经点放置位置的敏感性是 SelectedRoute 选择算法中的一个关键因素。
例如,假设某个途经点的初始设置位置刚好在隧道内。如果此途经点的位置随后略微调整到相邻的道路,尽管纬度和经度坐标几乎完全相同,但路线引擎可能会生成完全不同的路线。这一现象凸显了精确输入途经点的重要性,以及路线优化所涉及的复杂性,尤其是在道路网络和地理特征错综复杂的地区。


6.并非所有道路都可跟踪
您选择的路线可能并非始终可追踪
- 超出注册的“管辖区”
- 较低的“道路实用性”
- 这可能会导致可追踪性随时间而变化
验证异步运行 ⇒ 检查已注册的 SelectedRoutes 是否全部通过此验证
SelectedRoute 定义的最佳实践
请遵循以下最佳实践,以提高 SelectedRoute 定义和生成的数据的质量。
使用中间航点(中间点)
即使对于看似简单的短 SelectedRoutes,也强烈建议至少包含一个中间途经点。
- 为什么?
- 引导式路线规划:确保 SelectedRoute 遵循您想要的特定路线,尤其是在起点和目的地之间存在替代道路的情况下。
- 启用环路:必须启用此属性才能正确表示起点和目的地相同的环路或“往返”SelectedRoutes。
- 提高绕行检测能力:您提供的途经点越多,就越容易检测到流量可能偏离了您预期的 SelectedRoute 的数据点并将其标记出来。
- 如何操作?
- 您可以使用地理空间函数以编程方式查找已知 SelectedRoute 上的中点。
- 示例 (BigQuery):使用 ST_LINEINTERPOLATEPOINT 函数。
- 示例 (JavaScript):使用 Turf.js 库中的 along 函数。
匹配来自外部系统的路线
如果您要从外部 GIS 或基于其他道路网络构建的系统导入路线数据,则坐标可能无法与 Google 的道路网络完全对齐。这可能会导致“意外路线”。
- 解决方法:
- 检查道路一侧:首先,验证您的起点和出发点是否位于道路的正确一侧。
- 贴合到道路:使用 Roads API v2 matchPath 方法将现有路线数据贴合到 Google 的道路网络。
- 手动调整和重新绘制:在工具中手动调整途经点,使其与 Google 的道路相符。然后,使用 Routes API 的 computeRoute 方法(将流量设置为“unaware”)生成遵循 Google 网络的干净折线。
- 轨迹:作为最后的手段,在 GIS 工具中将您的数据叠加到 Google 的道路网络上,然后手动描绘路线以创建新的途经点。
数据清理和验证
您在 BigQuery 中收到的数据反映了真实世界的情况。您应应用清理步骤来过滤掉不代表核心 SelectedRoute 的数据。
处理绕行
为 RMI 提供支持的 Routes API 会始终尝试返回有效路线。如果您预期的 SelectedRoute 被封锁或严重拥堵,API 可能会返回一条绕行路线,该路线会偏离您定义的中间途经点。例如,如果您的 SelectedRoute 指定的路线为 A -> B -> C,那么绕行可能会导致返回的路线直接从 A -> C。

对于 RMI,这些绕行记录不太有用,因为它们并不代表您正在监控的特定 SelectedRoute。
- 操作:请勿直接删除这些行。您应标记这些事件以供分析,从而了解何时以及为何会发生绕行。
- 如何标记绕行:可通过两种主要方法以编程方式识别绕行:
- 途经点不匹配:检查返回的路线几何图形是否未包含您指定的所有中间途经点。
- 距离差异:检查返回路线的
distance是否与SelectedRoute的预期距离有显著差异。一个常见的阈值是 5% 的差异。
- 用于标记绕行的 BigQuery 示例:您可以将
SelectedRoutes表(包含预期距离)与RouteResponses表联接,并使用CASE语句创建标志。
处理“MultiLineString”几何图形
BigQuery 的 GEOGRAPHY 数据类型存在一个限制:它无法存储与自身重叠的单个 LineString(例如,曲线 U 形转弯、因绕行而折返的路线)。
- 症状:发生这种情况时,BigQuery 会将几何图形保存为
MultiLineString,并且路线的部分内容可能会缺失。 - 操作:您应从主要分析中过滤掉这些记录。
- BigQuery 过滤条件:使用
WHERE ST_GEOMETRYTYPE(route_geometry) != "ST_MultiLineString"
- BigQuery 过滤条件:使用
- 解决方案:
- 如果重叠是由绕行造成的,则可以按照上述方式过滤掉相应记录。
- 如果您的预期 SelectedRoute 包含重叠,您应通过将 SelectedRoute 拆分为两个或更多单独的
SelectedRoute对象来重新定义它。
时区转换
RMI BigQuery Export 中的所有时间戳数据均以世界协调时间 (UTC) 提供。如需以本地时区生成报告或进行分析,您应转换这些时间戳。
- 时间转换的 BigQuery 示例:使用
DATETIME和TIMESTAMP函数将世界协调时间 (UTC) 时间戳转换为特定本地时区,例如“America/Los_Angeles”。
总结
遵循本指南中概述的最佳实践,您可以确保 SelectedRoute 定义准确可靠,从而获得 Roads Management Insights 产品提供的可靠且可据以采取行动的流量数据。正确定义路线、处理复杂的道路几何形状以及验证生成的数据,这些都是充分发挥 RMI 潜能以满足道路管理需求的关键步骤。
作者
Sarthak Gangopadhyay:Google 地图 Devrel Naoya Moritani:Google 地图 Devrel