速度限制

Roads API 会针对特定路段返回公布的限速信息。对于限速可变的路段,系统会返回相应路段的默认限速。

我们无法保证 Roads API 返回的限速数据的准确性。提供的限速数据不是实时数据,可能为估算值、不准确、不完整和/或已过时。如需查看限速数据可用的区域,请参阅覆盖范围详情

请求

限速请求必须通过 HTTPS 发送,并且采用以下格式:

https://roads.googleapis.com/v1/speedLimits?parameters&key=YOUR_API_KEY

参数用法

必需参数

  • pathplaceId 参数。
    • path - 最多 100 个纬度/经度对的列表,表示一条路径。纬度值和经度值必须以英文逗号分隔。 经度/纬度对必须用竖线字符“|”分隔。当您提供 path 参数时,该 API 会先将路径捕获到车辆最有可能行驶的道路(与 snapToRoads 请求一样),然后确定相关道路路段的限速。如果您不希望该 API 对路径进行贴靠,则必须传递 placeId 参数,如下所述。以下示例展示了包含三个经纬度对的 path 参数:path=60.170880,24.942795|60.170879,24.942796|60.170877,24.942796
    • placeId - 表示一条或多条道路路段的地点 ID。请确保每个地点 ID 都引用的是道路路段,而不是其他类型的地点。每个请求最多可以传递 100 个地点 ID。该 API 不会对提供的地点 ID 执行道路贴靠。响应包含请求中每个地点 ID 的速度限制。您可以发送 snapToRoadsnearestRoads 请求来查找相关地点 ID,然后将其作为输入提供给 speedLimits 请求。以下示例展示了包含两个地点 ID 的 placeId 参数:placeId=ChIJX12duJAwGQ0Ra0d4Oi4jOGE&placeId=ChIJLQcticc0GQ0RoiNZJVa5GxU
  • key - 您应用的 API 密钥。您的应用每次向 Roads API 发送请求时都必须在每个请求中添加 API 密钥,以便标识自己。了解如何获取密钥

可选参数

  • units - 返回限速时,是采用公里/小时还是英里/小时。此值可以设置为 KPHMPH。默认设置为 KPH

响应

speedLimits 响应中可能包含以下元素:

  • speedLimits - 道路元数据的数组。每个元素都包含以下字段:
    • placeId - 地点的唯一标识符。Roads API 返回的所有地点 ID 都与道路路段相对应。
    • speedLimit - 相应路段的限速。
    • units - 返回 KPHMPH
  • snappedPoints - 一系列已对齐的点。只有当请求包含 path 参数时,此数组才会存在。每个点都包含以下字段:
    • location - 包含 latitudelongitude 值。
    • originalIndex - 一个整数,表示原始请求中的相应值。请求中的每个值都应映射到响应中的经过截断的值。这些值从 0 开始编号,因此 originalIndex4 的点将是传递给 path 参数的第 5 个经纬度的平移值。
    • placeId - 地点的唯一标识符。Roads API 返回的所有地点 ID 都与道路路段相对应。您可以在限速请求中传递 placeId,以确定相应路段的限速。
  • warning_message - 包含用户可见警告的字符串。

使用路径的请求示例

此请求会获取穿过葡萄牙里斯本 Vasco da Gama 桥的路径中距离指定经纬度对最近的每个路段的限速。

请求

https://roads.googleapis.com/v1/speedLimits?path=38.75807927603043,-9.03741754643809|38.6896537,-9.1770515|41.1399289,-8.6094075&key=YOUR_API_KEY

答案

{
  speedLimits:
  [
    {
      placeId: "ChIJX12duJAwGQ0Ra0d4Oi4jOGE",
      speedLimit: 105,
      units: "KPH"
    },
    {
      placeId: "ChIJLQcticc0GQ0RoiNZJVa5GxU",
      speedLimit: 70,
      units: "KPH"
    },
    {
      placeId: "ChIJJ4vQRudkJA0RpednU70A-5M",
      speedLimit: 55,
      units: "KPH"
    }
  ],
  snappedPoints:
  [
    {
      location:
      {
        latitude: 38.75807927603043,
        longitude: -9.037417546438084
      },
      originalIndex: 0,
      placeId: "ChIJX12duJAwGQ0Ra0d4Oi4jOGE"
    },
    {
      location:
      {
        latitude: 38.689653701836896,
        longitude: -9.177051486847693
      },
      originalIndex: 1,
      placeId: "ChIJLQcticc0GQ0RoiNZJVa5GxU"
    },
    {
      location:
      {
        latitude: 41.13993011767777,
        longitude: -8.609400794783655
      },
      originalIndex: 2,
      placeId: "ChIJJ4vQRudkJA0RpednU70A-5M"
    }
  ],
  warningMessage: "Input path is too sparse. You should provide a path where consecutive points are closer to each other. Refer to the 'path' parameter in Google Roads API documentation."
}

请注意上述响应中关于点稀疏的警告消息。如果您要请求任意地点最近路段的限速,则必须改为使用从 nearestRoads 端点检索到的地点 ID 调用 speedLimits

使用地点 ID 的请求示例

您可以传递道路路段的地点 ID,而不是使用经纬度对。我们建议您使用 snapToRoadsnearestRoads 请求获取道路路段的地点 ID。当您传递地点 ID 时,该 API 会返回每个地点 ID 所代表的路段的限速。该 API 不会对提供的地点 ID 应用任何道路贴靠。

以下示例请求了葡萄牙里斯本穿越 Vasco da Gama 桥的部分路段的限速。

请求

https://roads.googleapis.com/v1/speedLimits?placeId=ChIJX12duJAwGQ0Ra0d4Oi4jOGE&placeId=ChIJLQcticc0GQ0RoiNZJVa5GxU&placeId=ChIJJ4vQRudkJA0RpednU70A-5M&key=YOUR_API_KEY

答案

{
  "speedLimits": [
    {
      placeId: "ChIJX12duJAwGQ0Ra0d4Oi4jOGE",
      speedLimit: 105,
      units: "KPH"
    },
    {
      placeId: "ChIJLQcticc0GQ0RoiNZJVa5GxU",
      speedLimit: 70,
      units: "KPH"
    },
    {
      placeId: "ChIJJ4vQRudkJA0RpednU70A-5M",
      speedLimit: 55,
      units: "KPH"
    }
  ]
}

使用建议

为了尽量减少对速度限制服务的调用次数,我们建议您每隔 5 到 15 分钟对资产位置进行采样(确切值取决于资产的行驶速度)。如果资产固定不动,一个位置样本就够(无需进行多次调用)。

为了尽可能缩短总体延迟时间,我们建议您在累积一些数据后再调用速度限制服务,而不是每次收到移动资产位置时都调用 API。

为什么缺少部分/所有限速?

导致 speedLimits 缺失的最常见原因是请求非路段地点的限速。

上述示例使用 Vasco da Gama 桥来说明相关概念;该桥支持 E90 公路跨越 Tejo 河。桥梁本身的地点 ID 为 ChIJUzt97ZEwGQ0RM1JzQfqoDtU。上述响应中的第一个道路路段是 E90 公路的一部分,其地点 ID 为 ChIJX12duJAwGQ0Ra0d4Oi4jOGE。在示例请求中,如果您将道路地点 ID 替换为桥梁的地点 ID,则响应中的 speedLimits 数组中将只有两个限速值,因为桥梁的地点 ID 不引用单个道路路段。此外,如果所有地点 ID 都不是道路路段,则响应中不会包含任何限速。

使用地点 ID 发出限速请求时,请确保每个地点 ID 都引用的是道路路段,而不是其他类型的地点。最好使用 snapToRoadsnearestRoads 请求检索各个道路路段的地点 ID,这两种请求都可以在单次调用中返回多个地点 ID。