Update selected routes

En esta página, se describe cómo actualizar las rutas que ya creaste con la API de Roads Selection:

Actualizar una ruta

Para actualizar una ruta, envía una solicitud PATCH al extremo patch:

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

El cuerpo de la solicitud debe ser un objeto JSON que contenga los campos del SelectedRoute que se actualizará. Los campos actualizables incluyen displayName, routeAttributes, dynamicRoute y dynamicRouting (si la ruta es fija o dinámica). Cuando actualices los puntos de referencia de la ruta (dynamicRoute), debes proporcionar todo el objeto dynamicRoute (origen, destino y puntos de referencia intermedios). No se admiten las actualizaciones parciales de subcampos. No se pueden modificar los campos del sistema de solo lectura, como name, createTime y state. Los datos históricos en BigQuery conservan los datos de los puntos de referencia anteriores y actualizados con el mismo selectedRouteId. Si necesitas datos históricos independientes, crea una ruta nueva en lugar de realizar una actualización.

Actualizar los puntos de referencia de una ruta (dynamicRoute) activa una revalidación de la ruta. Los campos static_route_geometry y road_segment_ids de la tabla de BigQuery routes_status se actualizan según corresponda.

Las actualizaciones de puntos de referencia se permiten cuando la ruta está en STATE_RUNNING o STATE_INVALID, y se rechazan si la ruta está en STATE_VALIDATING o STATE_DELETING. Para obtener más información, consulta Estados de validación y de ruta. Se permite actualizar metadatos como displayName, routeAttributes o dynamicRouting en todos los estados, excepto en STATE_DELETING.

En la siguiente muestra de código, se indica la estructura de una solicitud PATCH al extremo 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"

Si se realiza de forma correcta, la API devuelve el recurso SelectedRoute actualizado:

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

Actualización por lotes de rutas

Para actualizar varias rutas en una sola solicitud, usa el extremo batchUpdate. Este extremo te permite actualizar hasta 1,000 rutas en una sola llamada. Las actualizaciones por lotes son atómicas: si alguna ruta de la solicitud no pasa la validación o no se puede actualizar, no se modifica ninguna ruta del lote.

Envía una solicitud POST al extremo batchUpdate:

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

El cuerpo de la solicitud debe ser un objeto JSON que contenga un array requests. Cada objeto dentro de este array es un UpdateSelectedRouteRequest que especifica la ruta name, un updateMask opcional a nivel del elemento y los campos selectedRoute que se actualizarán.

Un updateMask es un parámetro opcional que especifica la lista de campos que se actualizarán (displayName, routeAttributes, dynamicRouting o todo el objeto dynamicRoute). La configuración updateMask=* indica un reemplazo completo. Se puede especificar un updateMask dentro de cada elemento individual en requests o moverlo al nivel superior del cuerpo de la solicitud por lotes para aplicarlo a todas las rutas actualizadas del lote. Si se omite updateMask, se da por sentado que se actualizarán todos los campos actualizables que se completen en la solicitud. Si se establece un updateMask tanto a nivel del lote como del elemento, deben coincidir. Si especificas máscaras en conflicto, se producirá un error INVALID_ARGUMENT.

En la siguiente muestra de código, se indica la estructura de una solicitud POST al extremo 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"

Si se realiza de forma correcta, la API devuelve una respuesta que contiene un array de los recursos SelectedRoute que se actualizaron:

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