Update selected routes

本页面介绍了如何使用 Roads Selection API 更新已创建的路线:

  • 更新路线:使用 patch 端点更新单条路线的详细信息。
  • 批量更新路线:使用 batchUpdate 端点在单个请求中更新多条路线的详细信息。

更新路由

如需更新路由,请向 patch 端点发送 PATCH 请求:

https://roads.googleapis.com/selection/v1/projects/PROJECT_NUMBER/selectedRoutes/SELECTED_ROUTE_ID?updateMask=UPDATE_MASK

请求正文必须是包含要更新的 SelectedRoute 字段的 JSON 对象。可更新的字段包括 displayName、routeAttributes、dynamicRoute 和 dynamicRouting(路由是固定路由还是动态路由)。更新路线航点 (dynamicRoute) 时,您必须提供整个 dynamicRoute 对象(起点、终点和中间航点)。不支持部分子字段更新。只读系统字段(例如 name、createTime 和 state)无法修改。BigQuery 中的历史数据会在同一 selectedRouteId 下保留早期航点和更新后航点的数据。如果您需要单独的历史数据,请创建新路线,而不是执行更新。

更新路线的航点 (dynamicRoute) 会触发对路线的重新验证。routes_status BigQuery 表中的 static_route_geometry 和 road_segment_ids 字段会相应更新。

当路线处于 STATE_RUNNING 或 STATE_INVALID 状态时,允许更新航点;如果路线处于 STATE_VALIDATING 或 STATE_DELETING 状态,则拒绝更新航点。如需了解详情,请参阅验证和路由状态。 除 STATE_DELETING 之外,在所有状态下都允许更新元数据,例如 displayName、routeAttributes 或 dynamicRouting。

以下代码示例展示了向 patch 端点发出的 PATCH 请求的结构:

curl -X PATCH -d '{
    "dynamicRoute": {
      "origin": {
        "latitude": 38.5817,
        "longitude": -121.4944
      },
      "destination": {
        "latitude": 38.5449,
        "longitude": -121.7405
      }
    }
  }' \
-H 'X-Goog-User-Project: PROJECT_NUMBER' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
"https://roads.googleapis.com/selection/v1/projects/"\
"PROJECT_NUMBER/selectedRoutes/"\
"SELECTED_ROUTE_ID?updateMask=dynamicRoute"

成功后,该 API 会返回更新后的 SelectedRoute 资源:

{
  "name": "projects/PROJECT_NUMBER/selectedRoutes/SELECTED_ROUTE_ID",
  "dynamicRoute": {
    "origin": {
      "latitude": 38.5817,
      "longitude": -121.4944
    },
    "destination": {
      "latitude": 38.5449,
      "longitude": -121.7405
    }
  },
  "createTime": "2026-08-14T20:58:41.345418Z",
  "state": "STATE_VALIDATING",
  "dynamicRouting": TRUE_OR_FALSE
}

批量更新路线

如需在单个请求中更新多个路由,请使用 batchUpdate 端点。借助此端点,您可以在一次调用中更新最多 1,000 条路线。批量更新是原子操作:如果请求中的任何路由未能通过验证或无法更新,则批处理中的任何路由都不会被修改。

向 batchUpdate 端点发送 POST 请求:

https://roads.googleapis.com/selection/v1/projects/PROJECT_NUMBER/selectedRoutes:batchUpdate

请求正文必须是包含 requests 数组的 JSON 对象。此数组中的每个对象都是一个 UpdateSelectedRouteRequest,用于指定路线 name、可选的项级 updateMask 以及要更新的 selectedRoute 字段。

updateMask 是一个可选参数,用于指定要更新的字段列表(displayName、routeAttributes、dynamicRouting 或整个 dynamicRoute 对象)。设置 updateMask=* 表示完全替换。可以在 requests 中的每个单独项内指定 updateMask,也可以将其移至批量请求正文的顶层,以应用于批量中的所有更新路线。如果省略 updateMask,则请求中填充的所有可更新字段都会隐式更新。如果同时在批处理级别和商品级别设置了 updateMask,则两者必须一致。指定冲突的掩码会导致 INVALID_ARGUMENT 错误。

以下代码示例展示了向 batchUpdate 端点发出的 POST 请求的结构:

curl -X POST -d '{
    "requests": [
      {
        "selectedRoute": {
          "name": "projects/PROJECT_NUMBER/selectedRoutes/SELECTED_ROUTE_ID_1",
          "displayName": "DISPLAY_NAME_1",
          "dynamicRoute": {
            "origin": {"latitude": 37.5, "longitude": -122.1},
            "destination": {"latitude": 37.8, "longitude": -122.5}
          }
        },
        "updateMask": "displayName,dynamicRoute"
      },
      {
        "selectedRoute": {
          "name": "projects/PROJECT_NUMBER/selectedRoutes/SELECTED_ROUTE_ID_2",
          "displayName": "DISPLAY_NAME_2",
          "dynamicRoute": {
            "origin": {"latitude": 37.5, "longitude": -122.1},
            "destination": {"latitude": 37.8, "longitude": -122.5}
          }
        },
        "updateMask": "displayName,dynamicRoute"
      }
    ]}' \
-H 'X-Goog-User-Project: PROJECT_NUMBER' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
"https://roads.googleapis.com/selection/v1/projects/"\
"PROJECT_NUMBER/selectedRoutes:batchUpdate"

成功后,API 会返回一个响应,其中包含已更新的 SelectedRoute 资源数组:

{
  "selectedRoutes": [
    {
      "name": "projects/PROJECT_NUMBER/selectedRoutes/SELECTED_ROUTE_ID_1",
      "displayName": "DISPLAY_NAME_1",
      "dynamicRoute": {
        "origin": {
          "latitude": 37.5,
          "longitude": -122.1
        },
        "destination": {
          "latitude": 37.8,
          "longitude": -122.5
        }
      },
      "createTime": "2026-08-14T20:58:41.345418Z",
      "state": "STATE_VALIDATING",
      "dynamicRouting": TRUE_OR_FALSE
    },
    {
      "name": "projects/PROJECT_NUMBER/selectedRoutes/SELECTED_ROUTE_ID_2",
      "displayName": "DISPLAY_NAME_2",
      "dynamicRoute": {
        "origin": {
          "latitude": 37.5,
          "longitude": -122.1
        },
        "destination": {
          "latitude": 37.8,
          "longitude": -122.5
        }
      },
      "createTime": "2026-08-14T20:58:41.345418Z",
      "state": "STATE_VALIDATING",
      "dynamicRouting": TRUE_OR_FALSE
    }
  ]
}