Как оптимизировать порядок остановок на маршруте

Разработчики из Европейской экономической зоны (ЕЭЗ)

По умолчанию метод Compute Routes API маршрутов рассчитывает маршрут с несколькими остановками, которые называются путевыми точками с остановкой, в том порядке, в котором вы их указали.

Вы можете попросить Routes API оптимизировать маршрут, поменяв очередность остановок. Оптимизация путевых точек позволяет сократить время в пути, но при этом учитывает и другие факторы, например расстояние и количество поворотов, чтобы выбрать наиболее эффективный маршрут.

Как оптимизировать маршрутные точки

  1. Убедитесь, что ни для одной из путевых точек в маршруте не задано значение true для параметра via, например: {"address": "Clare,SA", "via": true}. Подробнее о промежуточных путевых точках…

  2. Убедитесь, что свойство routing_preference не имеет значение TRAFFIC_AWARE_OPTIMAL.

  3. Задайте для параметра optimize_waypoint_order значение true. Пример:

    "optimizeWaypointOrder": "true",
  4. Укажите поле routes.optimizedIntermediateWaypointIndex в маске поля:

    REST

    -H X-Goog-FieldMask: routes.optimizedIntermediateWaypointIndex

    RPC

    const (fieldMask = "routes.optimizedIntermediateWaypointIndex")

Как оптимизируется порядок путевых точек

Вот как Routes API оптимизирует порядок путевых точек в маршруте:

  1. Автоматически индексирует путевые точки на основе порядка, в котором вы указываете их в запросе, начиная с 0.

  2. Оптимизирует порядок путевых точек, используя присвоенные им в запросе индексы.

  3. Возвращает оптимизированный порядок путевых точек в объекте routes, в поле waypoint_order, в разделе routes.optimizedIntermediateWaypointIndex.

Пример

В этом запросе запрашивается оптимизация маршрута из Аделаиды (Южная Австралия) в каждый из основных винодельческих регионов Южной Австралии и обратно в Аделаиду.

curl -X POST -H 'content-type: application/json' -d ' {
  "origin": {
    "address": "Adelaide,SA"
  },
  "destination": {
    "address": "Adelaide,SA"
  },
  "intermediates": [
    {"address": "Barossa+Valley,SA"},
    {"address": "Clare,SA"},
    {"address": "Coonawarra,SA"},
    {"address": "McLaren+Vale,SA"}
  ],
  "travelMode": "DRIVE",
  "optimizeWaypointOrder": "true"
  }' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes,geocodingResults.intermediates.intermediateWaypointRequestIndex' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Routes API индексирует промежуточные путевые точки, указанные в запросе, начиная с 0. Пример:

0    {"address": "Barossa+Valley,SA"},
1    {"address": "Clare,SA"},
2    {"address": "Coonawarrav,SA"},
3    {"address": "McLaren+Vale,SA"}

Используя порядковые номера четырех путевых точек, указанных в запросе, сервис возвращает оптимизированный порядок:

"optimizedIntermediateWaypointIndex": [
                3,
                2,
                0,
                1
            ]