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