Как рассчитать матрицу маршрутов

Вы можете рассчитать расстояние и время в пути для нескольких пунктов отправления и назначения, используя метод 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: https://developers.google.com/maps/documentation/routes_preferred/reference/rpc/google.maps.routes.v1

REST: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/v1/TopLevel/computeRouteMatrix

Ниже приведены общие инструкции по использованию gRPC для вызова метода ComputeRouteMatrix:

  1. Проверьте необходимые буферы протоколов из репозитория googleapis:

    https://github.com/googleapis/googleapis/tree/master/google/maps/routes

    Обратите внимание, что некоторые системы сборки, например Go, могут делать это автоматически.

  2. С помощью предпочитаемого языка и набора инструментов сборки сгенерируйте соответствующий код буфера протокола.

  3. Сформируйте запрос. В запросе необходимо передать два обязательных элемента метаданных:

    • В качестве значения 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. Отключение ненужных полей может уменьшить задержку, поскольку для их обработки могут требоваться дополнительные вычисления. Задержка останется стабильной, если вы укажете нужные поля, а новые поля, требующие больше вычислений, будут добавлены позже.

  4. Отправьте запрос на адрес routespreferred.googleapis.com:443.Необходимо использовать протокол TLS.

Примеры использования метода ComputeRouteMatrix приведены в разделе Примеры вычисления матрицы маршрутов (бета-версия).

Отличительная особенность метода ComputeRouteMatrix заключается в том, что коды ошибок могут возвращаться как для всего потока, так и для отдельных элементов. Например, при подключении к потоку возвращается ошибка, если запрос имеет неверный формат (например, в нем нет источников). Однако если ошибка относится только к некоторым элементам потока (например, если для источника задан недействительный идентификатор места), то коды ошибок будут содержаться только в элементах, затронутых ошибкой.

Элементы, возвращаемые потоком, не обязательно будут возвращены в каком-либо порядке. Поэтому каждый элемент содержит origin_index и destination_index. Для пунктов отправления и назначения, указанных в запросе, пункт отправления маршрута эквивалентен origins[origin_index] для определенного элемента, а пункт назначения маршрута эквивалентен destinations[destination_index]. Индексация массивов начинается с нуля. Важно сохранить порядок списков источников и целей.

Расчет стоимости проезда по платным дорогам

Информацию о том, как рассчитываются сборы за проезд по платным дорогам, можно найти в разделе Как рассчитываются сборы за проезд по платным дорогам.

Примеры расчета сборов за проезд по платным дорогам можно найти в разделе Примеры расчета матрицы маршрутов.