DirectionsRenderer представляет собой компонент
визуализации маршрутов, полученных через DirectionsService.
Его основная задача — отрисовка результата маршрутизации на карте,
включая полилинии маршрута, маркеры начала и конца пути, а также
текстовые инструкции (при необходимости — в отдельной панели).
В архитектуре Google Maps JavaScript API этот компонент выступает связующим звеном между вычисленным маршрутом и его визуальным представлением.
DirectionsRenderer не выполняет расчёт маршрута. Он:
DirectionsResult);Получение маршрута происходит через
DirectionsService.route(), после чего результат передаётся
в DirectionsRenderer.
const directionsRenderer = new google.maps.DirectionsRenderer();
const directionsService = new google.maps.DirectionsService();
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 40.7128, lng: -74.0060 },
zoom: 7,
});
directionsRenderer.setMap(map);
Ключевой момент — привязка рендера к карте через
setMap().
const request = {
origin: "New York, NY",
destination: "Boston, MA",
travelMode: google.maps.TravelMode.DRIVING,
};
directionsService.route(request, (result, status) => {
if (status === "OK") {
directionsRenderer.setDirections(result);
}
});
Метод setDirections() принимает объект результата и
инициирует отрисовку.
Объект результата содержит:
routes — массив маршрутов;legs — сегменты пути;steps — отдельные инструкции;overview_polyline — упрощённая геометрия маршрута.DirectionsRenderer использует именно эти данные для
построения визуального слоя.
При создании объекта можно передать конфигурацию:
const directionsRenderer = new google.maps.DirectionsRenderer({
map: map,
suppressMarkers: false,
preserveViewport: true,
draggable: false,
});
Управляет отображением стандартных маркеров:
false — маркеры начала и конца отображаются;true — маркеры скрываются.Используется при полной кастомизации интерфейса.
Определяет поведение карты при установке маршрута:
false — карта автоматически подстраивается под
маршрут;true — текущий viewport сохраняется.Позволяет изменять маршрут мышью:
DirectionsRenderer может привязывать текстовые
инструкции к DOM-элементу:
const panel = document.getElementById("directionsPanel");
const directionsRenderer = new google.maps.DirectionsRenderer({
map: map,
panel: panel,
});
В этом режиме API автоматически формирует HTML-структуру с шагами маршрута.
Если в ответе несколько маршрутов, DirectionsRenderer
отображает первый по умолчанию.
Выбор маршрута:
directionsRenderer.setRouteIndex(1);
Это позволяет переключаться между альтернативными вариантами пути.
Повторная отрисовка выполняется через повторный вызов:
directionsRenderer.setDirections(newResult);
Старый маршрут полностью заменяется новым.
Очистка маршрута:
directionsRenderer.setDirections({ routes: [] });
или отключение от карты:
directionsRenderer.setMap(null);
Настройка внешнего вида полилинии осуществляется через
polylineOptions:
const directionsRenderer = new google.maps.DirectionsRenderer({
map: map,
polylineOptions: {
strokeColor: "#1a73e8",
strokeOpacity: 0.9,
strokeWeight: 5,
},
});
Используется для визуального соответствия интерфейсу приложения.
При suppressMarkers: true маркеры полностью отключаются,
после чего их можно создать вручную:
new google.maps.Marker({
position: { lat: 40.7128, lng: -74.0060 },
map: map,
label: "A",
});
Это применяется для сложных сценариев с кастомными иконками и логикой отображения.
При включённом draggable: true маршрут становится
редактируемым.
Изменения можно отслеживать:
directionsRenderer.addListener("directions_changed", () => {
const updated = directionsRenderer.getDirections();
});
Это позволяет реагировать на перестроение маршрута в реальном времени.
При работе с динамическими интерфейсами часто требуется сохранить текущий маршрут:
const currentRoute = directionsRenderer.getDirections();
Полученный объект можно сериализовать и восстановить позже через
setDirections().
В одном приложении допускается несколько рендереров:
const renderer1 = new google.maps.DirectionsRenderer({
map: map1,
});
const renderer2 = new google.maps.DirectionsRenderer({
map: map2,
});
Каждый управляет своим набором маршрутов независимо.
DirectionsRenderer не обрабатывает ошибки напрямую, но
зависит от результата DirectionsService:
NOT_FOUND — один из адресов не распознан;ZERO_RESULTS — маршрут невозможен;OVER_QUERY_LIMIT — превышение лимита запросов.В случае ошибки setDirections() не вызывается.
При стандартной работе компонент автоматически изменяет область
отображения карты, чтобы маршрут полностью помещался в экран. Это
поведение контролируется preserveViewport.
В сложных интерфейсах часто фиксируется масштаб карты вручную, чтобы избежать скачков при обновлении маршрутов.
При рендеринге создаются следующие визуальные элементы:
Типовой цикл работы:
DirectionsService;DirectionsResult;DirectionsRenderer;Этот цикл является основой навигационных приложений на JavaScript.
При масштабировании или перемещении карты
DirectionsRenderer не пересчитывает маршрут, а только
изменяет его визуальное положение, так как геометрия уже задана в
координатах.
draggable;DirectionsService;В сложных приложениях DirectionsRenderer часто
используется только как визуальный слой, а логика маршрутов выносится
отдельно:
В таких случаях компонент выполняет роль «отрисовщика», а не навигационного ядра.