Дорожная обстановка в Google Maps реализуется через отдельный визуальный слой, который накладывается на базовую карту и отображает текущую загруженность дорог.
Основной механизм — TrafficLayer, который автоматически
получает и отображает данные о трафике в реальном времени.
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 55.751244, lng: 37.618423 },
zoom: 12,
});
const trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
Слой не требует ручного обновления данных: система самостоятельно запрашивает актуальную информацию и обновляет отображение при изменении масштаба или области просмотра карты.
Ключевые особенности TrafficLayer:
Визуализация трафика основана на стандартизированной шкале:
Данные накладываются поверх полилиний дорог, не изменяя базовую геометрию карты.
Для расчёта маршрутов с учётом дорожной обстановки используется
DirectionsService. Основной параметр, влияющий на учет
трафика — drivingOptions.
const directionsService = new google.maps.DirectionsService();
const directionsRenderer = new google.maps.DirectionsRenderer();
directionsRenderer.setMap(map);
const request = {
origin: "Москва",
destination: "Санкт-Петербург",
travelMode: google.maps.TravelMode.DRIVING,
drivingOptions: {
departureTime: new Date(),
trafficModel: "bestguess"
}
};
directionsService.route(request, (result, status) => {
if (status === "OK") {
directionsRenderer.setDirections(result);
}
});
Параметр trafficModel управляет тем, как система
интерпретирует дорожную обстановку при прогнозировании времени в
пути.
Использует комбинацию исторических данных и текущей обстановки. Наиболее сбалансированный вариант.
Предполагает худший сценарий дорожной ситуации. Увеличивает расчетное время маршрута.
Использует минимально возможные задержки. Подходит для анализа идеальных условий.
Для корректного учета дорожной обстановки критически важен параметр
departureTime.
drivingOptions: {
departureTime: new Date(Date.now() + 15 * 60 * 1000)
}
Значение может быть:
При указании будущего времени система использует исторические модели движения.
В ответе DirectionsService возвращается несколько
вариантов маршрутов, каждый из которых содержит:
duration_in_traffic)Пример структуры:
result.routes[0].legs[0].duration.text
result.routes[0].legs[0].duration_in_traffic.text
Разница между этими значениями отражает влияние загруженности дорог.
Дорожная обстановка изменяется динамически, поэтому часто требуется обновление маршрута.
setInterval(() => {
directionsService.route(request, (result, status) => {
if (status === "OK") {
directionsRenderer.setDirections(result);
}
});
}, 60000);
Такой подход позволяет учитывать изменения пробок, аварий и временных перекрытий.
На практике TrafficLayer и
DirectionsService используются совместно:
new google.maps.TrafficLayer().setMap(map);
const request = {
origin: "А",
destination: "Б",
travelMode: "DRIVING",
drivingOptions: {
departureTime: new Date(),
trafficModel: "bestguess"
}
};
Такое сочетание позволяет одновременно видеть и анализировать дорожную ситуацию.
Система дорожной обстановки имеет ряд ограничений:
При построении критичных систем эти ограничения учитываются на уровне архитектуры приложения.
При включённом расчёте с трафиком система может возвращать несколько альтернативных маршрутов, отличающихся по:
Каждый маршрут содержит собственную оценку
duration_in_traffic, что позволяет выполнять сравнительный
анализ.
result.routes.forEach((route) => {
console.log(route.summary);
console.log(route.legs[0].duration_in_traffic.text);
});
Хотя TrafficLayer предоставляет готовую визуализацию,
данные могут использоваться и в кастомных решениях:
При этом Google Maps API не предоставляет прямого доступа к сырым данным скорости — только агрегированную модель через маршруты и слой трафика.
Все операции, связанные с дорожной обстановкой, являются асинхронными. Это связано с необходимостью постоянного получения актуальной информации из внешних источников.
directionsService.route(request, callback);
Обновления происходят по мере готовности данных, что требует учета возможных задержек при построении интерфейсов.
Модель трафика основана на двух типах информации:
Их комбинация формирует итоговую оценку загруженности дорог и времени
маршрута, используемую в duration_in_traffic.