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

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

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

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

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

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

Хотя 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"
      }
    ]
  }
}