Как задать точку маршрута

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

По умолчанию API обрабатывает промежуточные путевые точки как остановки на маршруте. Однако вы можете настроить промежуточную путевую точку как транзитную via, которую транспортное средство проезжает без остановки.

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

Маршрут, содержащий начальную точку, одну или несколько промежуточных путевых точек и пункт назначения, содержит только один отрезок маршрута, который соединяет начальную точку непосредственно с пунктом назначения.

Чтобы настроить промежуточную путевую точку как транзитную, задайте для свойства via путевой точки значение true в ресурсе Waypoint REST или сообщении Waypoint gRPC.

Routes API принимает адреса, идентификаторы мест и координаты широты и долготы, но координаты широты и долготы (latLng) обеспечивают наиболее точную корректировку маршрута для транзитных путевых точек.

Свойство via наиболее эффективно, когда вы создаете маршруты, перетаскивая путевые точки на карте. Этот подход позволяет вам увидеть, как выглядит окончательный маршрут в режиме реального времени, и помогает разместить путевые точки в доступных местах.

Пример: как задать путевую точку, через которую нужно проехать

В следующем примере показано, как задать "via": true для промежуточной путевой точки в полном запросе POST computeRoutes:

curl -X POST -d '{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.419734,
        "longitude": -122.0827784
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.417670,
        "longitude": -122.079595
      }
    }
  },
  "intermediates": [
    {
      "location":{
        "latLng":{
          "latitude": 37.419734,
          "longitude": -122.0807784
        }
      },
      "via": true
    }
  ],
  "travelMode": "DRIVE"
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Использование адресов или идентификаторов мест для промежуточных путевых точек

Для точной маршрутизации рекомендуется использовать координаты широты и долготы, но вы также можете указать промежуточные путевые точки, используя строку адреса или идентификатор места.

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

Если вы указываете путевую точку с помощью строки адреса или кода Plus Code, API геокодирует местоположение и возвращает соответствующий идентификатор места в массиве geocodingResults.intermediates в ответе.

Для каждого элемента в массиве intermediates используйте свойство intermediateWaypointRequestIndex, чтобы определить, какая промежуточная путевая точка в запросе соответствует идентификатору места в ответе.

Пример. Запрос идентификаторов мест для транзитных путевых точек

В следующем примере показан запрос с тремя промежуточными путевыми точками, для каждой из которых задано значение "via": true:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "intermediates": [
    {
      "address": "450 Serra Mall, Stanford, CA 94305, USA",
      "via": true
    },
    {
      "location":{
        "latLng":{
          "latitude": 37.419734,
          "longitude": -122.0807784
        }
      },
      "via": true
    },
    {
      "address": "1836 El Camino Real, Redwood City, CA 94063",
      "via": true
    }
  ],
  "travelMode": "DRIVE"
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,geocodingResults' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Ответ содержит массив geocodingResults с идентификаторами мест для начальной, конечной и двух промежуточных путевых точек, которые вы указали по адресу в запросе с индексом 0 и индексом 2. API пропускает промежуточную путевую точку с индексом 1 из geocodingResults, поскольку вы указали ее с помощью координат широты и долготы:

{
  "routes": [
    {
      "distanceMeters": 54200,
      "duration": "2400s",
      "legs": [
        {
          "distanceMeters": 54200,
          "duration": "2400s",
          "startLocation": {
            "latLng": {
              "latitude": 37.4220,
              "longitude": -122.0841
            }
          },
          "endLocation": {
            "latLng": {
              "latitude": 37.7786,
              "longitude": -122.3893
            }
          }
        }
      ]
    }
  ],
  "geocodingResults": {
    "origin": {
      "geocoderStatus": {},
      "type": [
        "premise"
      ],
      "placeId": "ChIJj38IfwK6j4ARNcyPDnEGa9g"
    },
    "destination": {
      "geocoderStatus": {},
      "type": [
        "premise"
      ],
      "placeId": "ChIJI7ES6tl_j4ARVpDZoXbWAiY"
    },
    "intermediates": [
      {
        "geocoderStatus": {},
        "intermediateWaypointRequestIndex": 0,
        "type": [
          "street_address"
        ],
        "placeId": "ChIJvdLMGyq7j4ARScE5tWX_C0Y"
      },
      {
        "geocoderStatus": {},
        "intermediateWaypointRequestIndex": 2,
        "type": [
          "premise"
        ],
        "placeId": "ChIJkTc0GKajj4AR9UMsOSHwGD0"
      }
    ]
  }
}