Вы можете рассчитать расстояние и продолжительность маршрута для нескольких исходных и конечных точек, используя метод ComputeRouteMatrix
API Routes Preferred. ComputeRouteMatrix
поддерживает как потоковые вызовы gRPC, так и вызовы REST HTTP.
Используя список пар «отправитель-направитель», ComputeRouteMatrix
вычисляет расстояние и длительность маршрута, начинающегося в каждом пункте отправления и заканчивающегося в каждом пункте назначения. Каждый элемент потока соответствует информации об одном маршруте.
Метод ComputeRouteMatrix
имеет ряд преимуществ по сравнению со службой Distance Matrix:
- Потоковая передача данных позволяет возвращать элементы до того, как будет рассчитана вся матрица, что снижает задержку.
-
ComputeRouteMatrix
располагает детальными параметрами расчета трафика, позволяя вам принимать решения о компромиссе между качеством и задержкой. - Запросы выполняются с более высоким приоритетом в инфраструктуре Google, что обеспечивает более высокую доступность.
- Вы можете указать направление движения и информацию о стороне дороги для путевых точек.
- Вы можете запросить возврат информации о платных дорогах, а также о расстоянии по маршруту и расчетном времени прибытия.
Включить метод ComputeRouteMatrix
Прежде чем использовать метод ComputeRouteMatrix
в коде, его необходимо включить. Подробнее о включении методов API Routes Preferred см. в разделе «Начало работы» .
Используйте метод ComputeRouteMatrix
Метод ComputeRouteMatrix
доступен через конечную точку Routes Preferred v1 .
Более подробную информацию смотрите в следующей документации:
Следующие общие шаги описывают, как использовать gRPC для вызова метода ComputeRouteMatrix
:
Проверьте необходимые протобуферы из репозитория googleapis:
https://github.com/googleapis/googleapis/tree/master/google/maps/routes
Обратите внимание, что некоторые системы сборки, такие как Go, могут делать это автоматически.
Используя предпочитаемый вами язык и набор инструментов сборки, сгенерируйте соответствующий код Protobuffer.
Сгенерируйте запрос. Вместе с запросом необходимо отправить два обязательных фрагмента метаданных:
- 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
. Для исходных и конечных точек, указанных в запросе, origin маршрута эквивалентен origins[origin_index]
для данного элемента, а destination маршрута эквивалентен destinations[destination_index]
. Эти массивы индексируются с нуля. Важно сохранять порядок следования исходных и конечных точек в списке.
Расчет платы за проезд
Информацию о расчете платы за проезд см. в разделе Расчет платы за проезд .
Примеры расчета платы за проезд см. в разделе Примеры расчета матрицы маршрутов .