Вы можете рассчитать расстояние и продолжительность маршрута для нескольких пунктов отправления и назначения, используя метод ComputeRouteMatrix Routes Preferred API. ComputeRouteMatrix поддерживает как потоковые вызовы gRPC, так и вызовы REST HTTP.
На основе списка пар точек отправления и назначения ComputeRouteMatrix рассчитывает расстояние и время пути для маршрута, начинающегося в каждой точке отправления и заканчивающегося в каждой точке назначения. Каждый элемент потока соответствует информации об одном маршруте.
Метод ComputeRouteMatrix имеет несколько преимуществ по сравнению с Distance Matrix API (Legacy):
- Потоковая передача позволяет возвращать элементы до того, как будет рассчитана вся матрица, что снижает задержку.
ComputeRouteMatrixпредлагает детальные настройки для расчета трафика, позволяющие найти баланс между качеством и задержкой.- Запросы выполняются с более высоким приоритетом в инфраструктуре Google, что обеспечивает более высокую доступность.
- Для путевых точек можно указать направление движения и сторону дороги.
- Вы можете запросить информацию о платных дорогах, а также о расстоянии и расчетном времени прибытия.
Включите метод ComputeRouteMatrix
Прежде чем использовать метод ComputeRouteMatrix в коде, его необходимо включить. Подробнее о том, как включить методы Routes Preferred API, читайте в статье Начало работы.
Использование метода ComputeRouteMatrix
Метод ComputeRouteMatrix доступен через конечную точку Routes Preferred v1.
Подробная информация доступна в Справочном центре:
Ниже описаны общие действия по вызову метода ComputeRouteMatrix с помощью gRPC.
Получите необходимые буферы протокола из хранилища 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]. Индексация массивов начинается с нуля. Важно сохранить порядок списков источников и назначений.
Расчет стоимости платных дорог
Подробнее о том, как рассчитать плату за проезд…
Примеры расчета платы за проезд см. в разделе Примеры расчета матрицы маршрутов.