Работа с маршрутом в Google Maps Platform JavaScript API опирается на
объект полилинии (Polyline), который позволяет гибко управлять
визуальным представлением линии на карте. Стилизация маршрута сводится к
конфигурации объекта PolylineOptions, а также к
динамическому изменению свойств уже созданной линии.
Основной способ отображения маршрута — использование класса
google.maps.Polyline. Он принимает объект настроек, в
котором определяются цвет, толщина и прозрачность линии.
const routePath = new google.maps.Polyline({
path: [
{ lat: 51.5, lng: 0.12 },
{ lat: 51.51, lng: 0.13 },
{ lat: 51.52, lng: 0.14 }
],
geodesic: true,
strokeColor: "#1a73e8",
strokeOpacity: 1.0,
strokeWeight: 4
});
routePath.setMap(map);
Геодезический режим особенно важен для дальних маршрутов, где прямая линия на плоской карте визуально искажает реальность.
При построении маршрутов через DirectionsService
визуализация обычно управляется DirectionsRenderer. Он
позволяет централизованно задавать стиль всей линии маршрута через
polylineOptions.
const directionsRenderer = new google.maps.DirectionsRenderer({
polylineOptions: {
strokeColor: "#ff5722",
strokeOpacity: 0.8,
strokeWeight: 6
},
suppressPolylines: false
});
directionsRenderer.setMap(map);
При таком подходе стилизация применяется ко всему маршруту, включая альтернативные сегменты при их отображении.
Для более сложных визуальных сценариев маршрут разбивается на сегменты и рендерится вручную через несколько Polyline.
const segment1 = new google.maps.Polyline({
path: pathPart1,
strokeColor: "#4caf50",
strokeWeight: 5
});
const segment2 = new google.maps.Polyline({
path: pathPart2,
strokeColor: "#ff9800",
strokeWeight: 5
});
segment1.setMap(map);
segment2.setMap(map);
Такой подход используется для:
Polyline поддерживает кастомные символы через свойство
icons. Это позволяет создавать пунктирные линии, стрелки
направления и анимированные эффекты.
const dashedLine = new google.maps.Polyline({
path: routePathData,
strokeOpacity: 0,
icons: [{
icon: {
path: "M 0,-1 0,1",
strokeOpacity: 1,
scale: 4
},
repeat: "20px"
}]
});
dashedLine.setMap(map);
Здесь основной цвет линии отключается, а визуализация достигается через повторяющийся символ.
const arrowSymbol = {
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
scale: 3,
strokeColor: "#1976d2"
};
const arrowLine = new google.maps.Polyline({
path: routePathData,
strokeColor: "#1976d2",
strokeWeight: 4,
icons: [{
icon: arrowSymbol,
offset: "100%"
}]
});
Стрелки помогают визуально определить направление движения по маршруту.
Анимация достигается через смещение символов вдоль линии с
использованием setInterval или
requestAnimationFrame.
let count = 0;
window.setInterval(() => {
count = (count + 1) % 200;
const icons = [{
icon: arrowSymbol,
offset: count / 2 + "%"
}];
arrowLine.set("icons", icons);
}, 50);
Подобный подход используется для эффекта «движущейся линии» или имитации транспортного потока.
Нативной поддержки градиентов у Polyline нет, однако визуальный эффект достигается разбиением маршрута на множество коротких сегментов с вычисляемыми цветами.
function interpolateColor(color1, color2, factor) {
return `rgb(
${Math.round(color1.r + factor * (color2.r - color1.r))},
${Math.round(color1.g + factor * (color2.g - color1.g))},
${Math.round(color1.b + factor * (color2.b - color1.b))}
)`;
}
Далее маршрут строится как набор линий, каждая из которых получает свой оттенок в зависимости от позиции вдоль пути.
При наложении нескольких маршрутов используется zIndex,
который управляет порядком отрисовки.
const mainRoute = new google.maps.Polyline({
path: mainPath,
strokeColor: "#0000ff",
strokeWeight: 6,
zIndex: 2
});
const alternativeRoute = new google.maps.Polyline({
path: altPath,
strokeColor: "#999999",
strokeWeight: 4,
zIndex: 1
});
Маршрут с более высоким zIndex всегда будет визуально
доминировать.
Толщина линии часто требует динамической корректировки при изменении
масштаба карты. Это достигается через обработчик
zoom_changed.
map.addListener("zoom_changed", () => {
const zoom = map.getZoom();
routePath.setOptions({
strokeWeight: zoom > 12 ? 6 : 3
});
});
Такой подход сохраняет визуальную читаемость маршрута на разных уровнях детализации.
Polyline поддерживает кастомные SVG path-формы через
Symbol.
const customSymbol = {
path: "M 0,-2 0,2",
strokeColor: "#e91e63",
strokeWeight: 2
};
const customLine = new google.maps.Polyline({
path: routePathData,
icons: [{
icon: customSymbol,
offset: "0",
repeat: "10px"
}],
strokeOpacity: 0
});
Это позволяет создавать уникальные визуальные стили, недостижимые стандартными параметрами линии.
При большом количестве координат критично учитывать производительность рендеринга:
setOptionsMVCArrayconst pathArray = new google.maps.MVCArray(routeCoordinates);
const optimizedLine = new google.maps.Polyline({
path: pathArray,
strokeColor: "#3f51b5",
strokeWeight: 4
});
MVCArray обеспечивает эффективное обновление без полной перерисовки слоя.
При работе с API маршрутов часто требуется переопределение стандартного отображения:
const directionsRenderer = new google.maps.DirectionsRenderer({
suppressPolylines: true
});
После отключения стандартной линии создаётся собственная Polyline на
основе результата DirectionsService, что даёт полный
контроль над стилем:
const route = result.routes[0].overview_path;
const customRouteLine = new google.maps.Polyline({
path: route,
strokeColor: "#00bcd4",
strokeWeight: 5,
strokeOpacity: 0.9
});
customRouteLine.setMap(map);