Получить матрицу маршрута

Матрица маршрутов — это двумерный массив информации о маршруте, где строки соответствуют начальным точкам, а столбцы — конечным точкам. Класс Route Matrix рассчитывает расстояние и длительность маршрута с началом в каждой начальной точке и окончанием в каждой конечной точке по заданному списку начальных точек и конечных точек. Класс Route Matrix используется для расчета расстояния и длительности маршрута с несколькими начальными точками и конечными точками.

Лимиты запросов

Метод RouteMatrix.computeRouteMatrix() устанавливает следующие ограничения на запросы для путевых точек, использующих адреса или экземпляры Place, а также для элементов. Элементы — это маршруты между каждым пунктом отправления и пунктом назначения в матрице маршрутов, поэтому количество элементов равно количеству пунктов отправления, умноженному на количество пунктов назначения. Например, если у вас 10 пунктов отправления и 10 пунктов назначения, у вас будет 100 элементов:

  • Количество элементов не может превышать 625 для маршрутов, не являющихся TRANSIT .
  • Если вы указываете маршрут TRANSIT , количество элементов не может превышать 100.
  • Если указано TRAFFIC_AWARE_OPTIMAL , количество элементов не может превышать 100.
  • Если вы указываете пункты отправления или назначения с помощью адресов или экземпляров мест , таким способом можно указать до 50 мест.

Пример запроса матрицы маршрута

В следующем примере показан запрос ComputeRouteMatrixRequest . Этот пример выполняет следующие действия:

  • Показывает задание массива из двух исходных и двух конечных точек маршрута. Метод рассчитывает маршрут от каждой исходной точки до каждой конечной точки, поэтому ответ содержит четыре маршрута.
    В массиве первый элемент имеет индекс 0, второй — индекс 1 и т. д.
  • Укажите возвращаемые поля. В этом примере настройте запрос на возврат durationMillis , distanceMeters и condition для каждого маршрута.
const request = {
  origins: [origin1, origin2],
  destinations: [destinationA, destinationB],
  travelMode: google.maps.TravelMode.DRIVING,
  units: google.maps.UnitSystem.METRIC,
  fields: ['durationMillis', 'distanceMeters', 'condition'], 
};
    

Ответ содержит четыре возможных маршрута для комбинации всех точек отправления и назначения, как показано в следующем примере:

"matrix": {
  "rows": [
    {
      "items": [
        {
          "condition": "ROUTE_EXISTS",
          "distanceMeters": 202587,
          "durationMillis": 10040000
        },
        {
          "condition": "ROUTE_EXISTS",
          "distanceMeters": 252734,
          "durationMillis": 12240000
        }
      ]
    },
    {
      "items": [
        {
          "condition": "ROUTE_EXISTS",
          "distanceMeters": 166135,
          "durationMillis": 6596000
        },
        {
          "condition": "ROUTE_EXISTS",
          "distanceMeters": 216282,
          "durationMillis": 8797000
        }
      ]
    }
  ]
}
    

Идентифицируйте каждый маршрут в результате, используя индексы отправителя и получателя, чтобы найти соответствующий RouteMatrixItem в двумерном массиве. Например, элемент RouteMatrixItem , описывающий маршрут, рассчитанный от отправителя с индексом 1 до получателя 0 в запросе, будет находиться во втором элементе массива RouteMatrix.rows и в первом элементе массива RouteMatrixRow.items .

В следующем фрагменте кода показано, как идентифицировать RouteMatrixItem для поиска маршрута для определенного пункта отправления и назначения:

// Find the route for origin 'x' and destination 'y'.
const {matrix} = await RouteMatrix.computeRouteMatrix(request);
const myRouteMatrixItem = matrix.rows[x].items[y];
    

Выберите поля для возврата

При запросе матрицы маршрутизации необходимо использовать маску поля, чтобы указать, какую информацию должен вернуть ответ.

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

Укажите список необходимых полей, установив свойство ComputeRoutesMatrixRequest.fields , как показано в следующем фрагменте:

fields: ['durationMillis', 'distanceMeters', 'condition'],
    

Определите, какие маски полей использовать

Вот как можно определить, какие поля вы хотите использовать, и создать для них маски полей:

  1. Запросить все поля , используя маску поля ['*'] .
  2. Просмотрите иерархию полей в классе RouteMatrixItem на предмет необходимых вам полей.
  3. Создайте маски полей, используя иерархию полей, показанную на предыдущем шаге, используя следующий формат:

    topLevelField[.secondLevelField][.thirdLevelField][...]

Например, для этого RouteMatrixItem :

  "travelAdvisory": {
    "fuelConsumptionMicroliters": 0,
    "tollInfo": {
      "estimatedPrices": [
        {
          "currencyCode": "USD",
          "units": 4,
          "nanos": 400000000
        }
      ]
    }
  },
    

Если вы хотите вернуть только поле tollInfo для RouteMatrixItem , маска поля будет следующей:

fields: ['travelAdvisory.tollInfo']

Если вместо этого вы хотите запросить расчетный расход топлива, ваша маска поля будет следующей:

fields: ['travelAdvisory.fuelConsumptionMicroliters']

Если вы хотите запросить оба варианта, маска поля будет следующей:

fields: ['travelAdvisory.fuelConsumptionMicroliters', 'travelAdvisory.tollInfo']

А если вы хотите запросить полный набор рекомендаций для путешественников, ваша маска поля выглядит следующим образом:

fields: ['travelAdvisory']