Вы можете рассчитать расстояние и время в пути для нескольких пунктов отправления и назначения, используя метод ComputeRouteMatrix из Routes Preferred API. ComputeRouteMatrix поддерживает как потоковые вызовы gRPC, так и вызовы REST HTTP.
Метод ComputeRouteMatrix рассчитывает расстояние и время в пути для маршрута от каждой точки отправления до каждой точки назначения. Каждый элемент потока соответствует информации об одном маршруте.
У метода ComputeRouteMatrix есть несколько преимуществ по сравнению с Distance Matrix API (прежней версии):
- Потоковая передача позволяет возвращать элементы до того, как будет рассчитана вся матрица, что снижает задержку.
ComputeRouteMatrixпредлагает точные настройки расчета трафика, позволяющие выбирать между качеством и задержкой.- Запросы выполняются с более высоким приоритетом в инфраструктуре Google, что обеспечивает более высокую доступность.
- Для путевых точек можно указать направление движения и сторону дороги.
- Вы можете запросить информацию о платных дорогах, а также о расстоянии и расчетном времени прибытия.
Включите метод ComputeRouteMatrix
Прежде чем использовать метод ComputeRouteMatrix в коде, его необходимо включить. Подробнее о том, как включить методы Routes Preferred API, рассказывается в руководстве по началу работы.
Использование метода ComputeRouteMatrix
Метод ComputeRouteMatrix доступен через конечную точку Routes Preferred v1.
Подробная информация доступна в следующих документах:
Ниже приведены общие инструкции по использованию gRPC для вызова метода ComputeRouteMatrix:
Проверьте необходимые буферы протоколов из репозитория googleapis:
https://github.com/googleapis/googleapis/tree/master/google/maps/routes
Обратите внимание, что некоторые системы сборки, например Go, могут делать это автоматически.
С помощью предпочитаемого языка и набора инструментов сборки сгенерируйте соответствующий код буфера протокола.
Сформируйте запрос. В запросе необходимо передать два обязательных элемента метаданных:
- В качестве значения X-Goog-Api-Key нужно указать ваш ключ API.
X-Goog-Fieldmask должен быть задан как список полей, разделенных запятыми, которые вам нужны в ответе. Пример: X-Goog-FieldMask: originIndex,destinationIndex,duration,distanceMeters,status. Вы можете использовать подстановочный знак (*), чтобы указать все поля, но это не рекомендуется. Используйте подстановочный знак, чтобы протестировать и понять ответ API, но в рабочем коде явно перечислите нужные поля в маске.
Подробную информацию о том, как создать строку маски поля, можно найти на странице https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/field_mask.proto. Отключение ненужных полей может уменьшить задержку, поскольку для их обработки могут требоваться дополнительные вычисления. Задержка останется стабильной, если вы укажете нужные поля, а новые поля, требующие больше вычислений, будут добавлены позже.
Отправьте запрос на адрес
routespreferred.googleapis.com:443.Необходимо использовать протокол TLS.
Примеры использования метода ComputeRouteMatrix приведены в разделе Примеры вычисления матрицы маршрутов (бета-версия).
Отличительная особенность метода ComputeRouteMatrix заключается в том, что коды ошибок могут возвращаться как для всего потока, так и для отдельных элементов. Например, при подключении к потоку возвращается ошибка, если запрос имеет неверный формат (например, в нем нет источников). Однако если ошибка относится только к некоторым элементам потока (например, если для источника задан недействительный идентификатор места), то коды ошибок будут содержаться только в элементах, затронутых ошибкой.
Элементы, возвращаемые потоком, не обязательно будут возвращены в каком-либо порядке. Поэтому каждый элемент содержит origin_index и destination_index. Для пунктов отправления и назначения, указанных в запросе, пункт отправления маршрута эквивалентен origins[origin_index] для определенного элемента, а пункт назначения маршрута эквивалентен destinations[destination_index]. Индексация массивов начинается с нуля. Важно сохранить порядок списков источников и целей.
Расчет стоимости проезда по платным дорогам
Информацию о том, как рассчитываются сборы за проезд по платным дорогам, можно найти в разделе Как рассчитываются сборы за проезд по платным дорогам.
Примеры расчета сборов за проезд по платным дорогам можно найти в разделе Примеры расчета матрицы маршрутов.