На этой странице описано, как обновить уже созданные маршруты с помощью 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 . При обновлении геометрии маршрута ( dynamicRoute ) необходимо предоставить весь объект dynamicRoute (начальная, конечная и промежуточные точки). Частичное обновление подполей не поддерживается. Системные поля только для чтения, такие как name , createTime и state , нельзя изменить. Исторические данные в BigQuery сохранят данные для старой и обновленной геометрии под одним и тем же selectedRouteId . Если вам нужны отдельные исторические данные, создайте новый маршрут, а не выполняйте обновление.
Обновление геометрии маршрута ( dynamicRoute ) требует его повторной проверки. Обновление геометрии разрешено, если маршрут находится в состоянии STATE_RUNNING или STATE_INVALID , и отклоняется, если маршрут находится в состоянии STATE_VALIDATING или STATE_DELETING . Для получения дополнительной информации см. раздел «Проверка и состояния маршрута» . Обновление метаданных, таких как displayName или routeAttributes разрешено во всех состояниях, кроме STATE_DELETING .
Приведённый ниже пример кода демонстрирует структуру запроса 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" }
Маршруты пакетного обновления
Для обновления нескольких маршрутов в одном запросе используйте конечную точку batchUpdate . Эта конечная точка позволяет обновить до 1000 маршрутов за один вызов. Пакетные обновления являются атомарными: если какой-либо маршрут в запросе не проходит проверку или не может быть обновлен, ни один маршрут в пакете не изменяется.
Отправьте POST запрос на конечную точку batchUpdate :
https://roads.googleapis.com/selection/v1/projects/PROJECT_NUMBER/selectedRoutes:batchUpdate
Тело запроса должно представлять собой JSON-объект, содержащий массив requests . Каждый объект в этом массиве является объектом UpdateSelectedRouteRequest , который указывает name маршрута, необязательную updateMask на уровне элемента и поля selectedRoute для обновления.
Параметр updateMask является необязательным и указывает список полей, подлежащих обновлению ( displayName , routeAttributes или весь объект dynamicRoute ). Установка updateMask=* означает полную замену. Параметр updateMask может быть указан внутри каждого отдельного элемента в requests или перемещен на верхний уровень тела пакетного запроса, чтобы применить его ко всем обновляемым маршрутам в пакете. Если updateMask опущен, подразумевается, что обновляются все обновляемые поля, заполненные в запросе. Если updateMask установлен как на уровне пакета, так и на уровне элемента, они должны совпадать. Указание конфликтующих масок приводит к ошибке INVALID_ARGUMENT .
Приведённый ниже пример кода демонстрирует структуру POST запроса к конечной точке 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" В случае успеха 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" }, { "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" } ] }