Update selected routes

Trang này mô tả cách cập nhật các tuyến đường bạn đã tạo bằng Roads Selection API:

Cập nhật tuyến đường

Để cập nhật tuyến đường, hãy gửi yêu cầu PATCH đến điểm cuối patch:

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

Nội dung yêu cầu phải là một đối tượng JSON chứa các trường của SelectedRoute cần cập nhật. Các trường có thể cập nhật bao gồm displayName, routeAttributes, dynamicRoute và dynamicRouting (cho biết tuyến đường là cố định hay linh động). Khi cập nhật điểm tham chiếu của tuyến đường (dynamicRoute), bạn phải cung cấp toàn bộ đối tượng dynamicRoute (điểm xuất phát, điểm đến và điểm tham chiếu trung gian). Không hỗ trợ cập nhật một phần trường con. Bạn không thể sửa đổi các trường hệ thống chỉ có thể đọc như name, createTime và state. Dữ liệu trong quá khứ trong BigQuery giữ lại dữ liệu cho các điểm tham chiếu trước đó và đã cập nhật trong cùng một selectedRouteId. Nếu bạn cần dữ liệu trước đây riêng biệt, hãy tạo một tuyến đường mới thay vì cập nhật.

Việc cập nhật điểm tham chiếu của tuyến đường (dynamicRoute) sẽ kích hoạt quy trình xác thực lại tuyến đường. Các trường static_route_geometry và road_segment_ids trong bảng BigQuery routes_status sẽ được cập nhật tương ứng.

Bạn có thể cập nhật điểm tham chiếu khi tuyến đường ở trạng thái STATE_RUNNING hoặc STATE_INVALID, và sẽ bị từ chối nếu tuyến đường ở trạng thái STATE_VALIDATING hoặc STATE_DELETING. Để biết thêm thông tin, hãy xem phần Xác thực và trạng thái tuyến đường. Bạn được phép cập nhật siêu dữ liệu như displayName, routeAttributes hoặc dynamicRouting ở mọi trạng thái, ngoại trừ STATE_DELETING.

Mã mẫu sau đây cho thấy cấu trúc của một yêu cầu PATCH đến điểm cuối 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"

Nếu thành công, API sẽ trả về tài nguyên SelectedRoute đã cập nhật:

{
  "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
}

Cập nhật tuyến đường theo lô

Để cập nhật nhiều tuyến đường trong một yêu cầu, hãy sử dụng điểm cuối batchUpdate. Điểm cuối này cho phép bạn cập nhật tối đa 1.000 tuyến đường trong một lệnh gọi. Các bản cập nhật theo lô là nguyên tử: nếu bất kỳ tuyến đường nào trong yêu cầu không xác thực được hoặc không thể cập nhật, thì không có tuyến đường nào trong lô được sửa đổi.

Gửi yêu cầu POST đến điểm cuối batchUpdate:

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

Nội dung yêu cầu phải là một đối tượng JSON chứa mảng requests. Mỗi đối tượng trong mảng này là một UpdateSelectedRouteRequest chỉ định name của tuyến, updateMask không bắt buộc ở cấp mục và các trường selectedRoute cần cập nhật.

updateMask là một tham số không bắt buộc, chỉ định danh sách các trường cần cập nhật (displayName, routeAttributes, dynamicRouting hoặc toàn bộ đối tượng dynamicRoute). Việc đặt updateMask=* cho biết một sự thay thế hoàn toàn. Bạn có thể chỉ định updateMask bên trong từng mục riêng lẻ trong requests hoặc chuyển đến cấp cao nhất của phần nội dung yêu cầu theo lô để áp dụng cho tất cả các tuyến được cập nhật trong lô. Nếu bạn bỏ qua updateMask, thì tất cả các trường có thể cập nhật được điền sẵn trong yêu cầu sẽ được ngầm định là được cập nhật. Nếu bạn đặt updateMask ở cả cấp lô và cấp mặt hàng, thì các giá trị này phải khớp nhau. Việc chỉ định các mặt nạ xung đột sẽ dẫn đến lỗi INVALID_ARGUMENT.

Mã mẫu sau đây cho thấy cấu trúc của một yêu cầu POST đến điểm cuối batchUpdate:

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"

Nếu thành công, API sẽ trả về một phản hồi chứa một mảng các tài nguyên SelectedRoute đã được cập nhật:

{
  "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
    }
  ]
}