Update selected routes

На этой странице описано, как обновить маршруты, созданные с помощью Roads Selection API.

Изменение маршрута

Чтобы обновить маршрут, отправьте запрос PATCH к конечной точке patch:

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

Тело запроса должно быть объектом JSON, содержащим поля обновляемого объекта SelectedRoute. Обновляемые поля включают displayName, routeAttributes, dynamicRoute и dynamicRouting (независимо от того, является ли маршрут фиксированным или динамическим). При обновлении путевых точек маршрута (dynamicRoute) необходимо предоставить весь объект dynamicRoute (пункты отправления и назначения, а также промежуточные путевые точки). Частичное обновление подполей не поддерживается. Системные поля, доступные только для чтения, например name, createTime и state, изменить нельзя. В BigQuery сохраняются данные как для прежних, так и для обновленных путевых точек с одним и тем же значением selectedRouteId. Если вам нужна отдельная статистика, создайте новый маршрут, а не обновляйте существующий.

Обновление путевых точек маршрута (dynamicRoute) запускает повторную проверку маршрута. Поля static_route_geometry и road_segment_ids в таблице BigQuery routes_status обновляются соответствующим образом.

Обновление путевых точек разрешено, если маршрут находится в состоянии STATE_RUNNING или STATE_INVALID, и отклоняется, если маршрут находится в состоянии STATE_VALIDATING или STATE_DELETING. Подробнее о проверке и статусах маршрутов… Обновление метаданных, таких как displayName, routeAttributes или dynamicRouting, разрешено во всех статусах, кроме 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",
  "dynamicRouting": TRUE_OR_FALSE
}

Пакетное обновление маршрутов

Чтобы обновить несколько маршрутов в одном запросе, используйте конечную точку batchUpdate. Эта конечная точка позволяет обновить до 1000 маршрутов за один вызов. Пакетные обновления атомарны: если хотя бы один маршрут в запросе не проходит проверку или не может быть обновлен, ни один маршрут в пакете не изменяется.

Отправьте запрос POST конечной точке batchUpdate:

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

Тело запроса должно быть объектом JSON, содержащим массив requests. Каждый объект в этом массиве представляет собой UpdateSelectedRouteRequest, в котором указывается name маршрута, необязательное поле updateMask на уровне элемента и поля selectedRoute, которые нужно обновить.

updateMask – это необязательный параметр, который указывает список полей, которые нужно обновить (displayName, routeAttributes, dynamicRouting или весь объект 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",
      "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
    }
  ]
}