Google Maps Distance Matrix Service представляет собой компонент, предназначенный для вычисления расстояний и времени в пути между множеством точек отправления и назначения. В отличие от простого маршрута между двумя точками, сервис оперирует матрицей значений, где каждая строка соответствует одному origin, а каждый столбец — одному destination. Это позволяет решать задачи логистики, распределения нагрузки, поиска ближайших объектов и анализа транспортной доступности на уровне набора координат.
Основная логика сервиса строится вокруг четырёх ключевых сущностей:
Дополнительно могут использоваться параметры оптимизации маршрута и ограничения по времени.
Пример базовой структуры запроса:
const service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
origins: [
{ lat: 43.238949, lng: 76.889709 },
{ lat: 43.25667, lng: 76.92861 }
],
destinations: [
{ lat: 43.2220, lng: 76.8512 },
{ lat: 43.3017, lng: 76.9500 }
],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
},
(response, status) => {
console.log(response);
console.log(status);
}
);
Ответ сервиса имеет строго матричную структуру:
rows[] — соответствует каждому originelements[] — массив результатов для каждого
destinationКаждый элемент содержит:
distance — расстояние (в метрах и текстовом виде)duration — время в путиstatus — статус конкретной пары origin-destinationПример логической структуры:
Origin A → Destination 1: distance, duration
Origin A → Destination 2: distance, duration
Origin B → Destination 1: distance, duration
Origin B → Destination 2: distance, duration
Такой формат позволяет интерпретировать данные как двумерную таблицу, где каждая ячейка представляет результат маршрутизации.
Параметр travelMode определяет алгоритм расчёта
маршрута. Поддерживаются следующие режимы:
DRIVING — автомобильный маршрутWALKING — пеший маршрутBICYCLING — велосипедный маршрутTRANSIT — общественный транспортКаждый режим влияет не только на маршрут, но и на структуру ответа.
Например, в режиме TRANSIT дополнительно могут появляться
сведения о пересадках и расписаниях, тогда как в WALKING
акцент делается на пешеходные дорожки и проходы.
Distance Matrix Service имеет строгие ограничения, которые напрямую влияют на архитектуру приложений:
Практическая формула количества вычислений:
N = origins × destinations
Если origins = 10, destinations = 10, итоговое количество вычислений равно 100.
Это значение критично для оптимизации запросов и контроля затрат.
Каждая ячейка результата содержит собственный статус, независимый от общего статуса запроса:
OK — маршрут успешно построенNOT_FOUND — координаты не удалось сопоставить с
дорожной сетьюZERO_RESULTS — маршрут невозможенMAX_ROUTE_LENGTH_EXCEEDED — превышена допустимая длина
маршрутаОбщий статус запроса может быть успешным, даже если часть элементов содержит ошибки. Это важная особенность, позволяющая частично получать данные при проблемных координатах.
API использует callback-модель, где результат передаётся через функцию обратного вызова. Однако архитектурно запрос асинхронный и не блокирует основной поток выполнения.
Типовой сценарий обработки:
service.getDistanceMatrix(request, (response, status) => {
if (status !== "OK") {
return;
}
const origins = response.originAddresses;
const destinations = response.destinationAddresses;
response.rows.forEach((row, i) => {
row.elements.forEach((element, j) => {
if (element.status === "OK") {
console.log(
origins[i],
"→",
destinations[j],
element.distance.text,
element.duration.text
);
}
});
});
});
Структура данных требует вложенной итерации: сначала по origins, затем по destinations.
При работе с большим количеством точек критически важно уменьшать число запросов к сервису. Основные стратегии:
Разбиение больших массивов на блоки фиксированного размера снижает вероятность превышения лимитов.
Результаты матрицы часто повторяются, особенно в системах доставки и логистики. Кэширование пар origin-destination снижает нагрузку.
Для часто используемых точек (склады, офисы, хабы) целесообразно хранить заранее вычисленные значения.
Параметр unitSystem определяет формат отображения
расстояний:
METRIC — километры, метрыIMPERIAL — мили, футыФизически расчёт всегда выполняется на стороне сервиса, а единицы влияют только на представление данных.
Дополнительные параметры позволяют управлять логикой маршрутизации:
avoidHighways — исключение автомагистралейavoidTolls — исключение платных дорогЭти параметры изменяют не только результат по расстоянию, но и время в пути, поскольку алгоритм выбирает альтернативные маршруты с разной топологией дорожной сети.
При интеграции Distance Matrix Service необходимо учитывать следующие сценарии:
Рекомендуемая стратегия обработки:
status на уровне запросаelement.status на уровне ячеекconst request = {
origins: ["43.2,76.8", "43.3,76.9"],
destinations: ["43.25,76.85", "43.31,76.95"],
travelMode: google.maps.TravelMode.DRIVING,
avoidTolls: true,
avoidHighways: false,
unitSystem: google.maps.UnitSystem.METRIC,
drivingOptions: {
departureTime: new Date(),
trafficModel: "bestguess"
}
};
Параметр drivingOptions особенно важен при учёте
трафика, поскольку позволяет учитывать динамическую дорожную
обстановку.
Distance Matrix Service используется в системах, где требуется массовая оценка расстояний:
Ключевая особенность — переход от точечного маршрута к матричной модели данных, где вычисления выполняются пакетно.
При проектировании систем на основе Distance Matrix необходимо учитывать:
Практическая оптимизация включает:
Поле duration может содержать:
Разница между ними критична в системах реального времени, особенно при динамическом распределении задач.
При увеличении количества точек матрица растёт квадратично. Например:
Это приводит к необходимости архитектурного ограничения входных данных или перехода к многоуровневым стратегиям вычислений, где предварительно отсекаются заведомо нерелевантные пары.
С точки зрения структуры данных сервис формирует трёхуровневую модель:
Эта модель позволяет интерпретировать результат как таблицу маршрутов, где каждая ячейка содержит независимый результат вычисления расстояния и времени в пути.