Update selected routes

Nesta página, descrevemos como atualizar rotas que você já criou usando a API Roads Selection:

Atualizar uma rota

Para atualizar uma rota, envie uma solicitação PATCH ao endpoint patch:

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

O corpo da solicitação precisa ser um objeto JSON que contenha os campos do SelectedRoute a serem atualizados. Os campos atualizáveis incluem displayName, routeAttributes, dynamicRoute e dynamicRouting (se a rota é fixa ou dinâmica). Ao atualizar os waypoints do trajeto (dynamicRoute), é necessário fornecer todo o objeto dynamicRoute (origem, destino e waypoints intermediários). Não é possível fazer atualizações parciais de subcampos. Os campos do sistema somente leitura, como name, createTime e state, não podem ser modificados. Os dados históricos no BigQuery retêm os dados dos waypoints anteriores e atualizados no mesmo selectedRouteId. Se você precisar de dados históricos separados, crie uma nova rota em vez de realizar uma atualização.

Atualizar os waypoints de um trajeto (dynamicRoute) aciona uma revalidação do trajeto. Os campos static_route_geometry e road_segment_ids na tabela routes_status do BigQuery são atualizados de acordo.

As atualizações de waypoints são permitidas quando o trajeto está em STATE_RUNNING ou STATE_INVALID e são rejeitadas se o trajeto está em STATE_VALIDATING ou STATE_DELETING. Para mais informações, consulte Estados de validação e rota. A atualização de metadados como displayName, routeAttributes ou dynamicRouting é permitida em todos os estados, exceto STATE_DELETING.

O exemplo de código a seguir mostra a estrutura de uma solicitação PATCH para o endpoint 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"

Se a operação for bem-sucedida, a API vai retornar o recurso SelectedRoute atualizado:

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

Atualização em lote de rotas

Para atualizar várias rotas em uma única solicitação, use o endpoint batchUpdate. Esse endpoint permite atualizar até 1.000 rotas em uma chamada. As atualizações em lote são atômicas: se alguma rota na solicitação falhar na validação ou não puder ser atualizada, nenhuma rota no lote será modificada.

Envie uma solicitação POST para o endpoint batchUpdate:

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

O corpo da solicitação precisa ser um objeto JSON que contenha uma matriz requests. Cada objeto nessa matriz é um UpdateSelectedRouteRequest que especifica a rota name, um updateMask opcional no nível do item e os campos selectedRoute a serem atualizados.

Um updateMask é um parâmetro opcional que especifica a lista de campos a serem atualizados (displayName, routeAttributes, dynamicRouting ou todo o objeto dynamicRoute). Definir updateMask=* indica uma substituição completa. É possível especificar um updateMask em cada item individual em requests ou movê-lo para o nível superior do corpo da solicitação em lote para aplicar a todas as rotas atualizadas no lote. Se updateMask for omitido, todos os campos atualizáveis preenchidos na solicitação serão atualizados. Se um updateMask for definido no nível do lote e do item, eles precisarão ser correspondentes. Especificar máscaras conflitantes resulta em um erro INVALID_ARGUMENT.

O exemplo de código a seguir mostra a estrutura de uma solicitação POST para o endpoint 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"

Se a solicitação for bem-sucedida, a API vai retornar uma resposta com uma matriz dos recursos SelectedRoute que foram atualizados:

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