En esta página, se describe cómo actualizar las rutas que ya creaste con la API de Roads Selection:
- Actualiza una ruta: Actualiza los detalles de una sola ruta con el extremo
patch. - Actualización por lotes de rutas: Actualiza los detalles de varias rutas en una sola solicitud con el extremo
batchUpdate.
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 } ] }