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

要求主體必須是 JSON 物件,其中包含要更新的 SelectedRoute 欄位。可更新的欄位包括 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
    }
  ]
}