В Google Maps JavaScript API настройка стиля линий выполняется через объекты конфигурации, связанные с примитивами Polyline и Polygon. Линии на карте — это не просто геометрия маршрута, а полноценный визуальный слой, поведение которого определяется набором графических параметров: цвет, толщина, прозрачность, тип штриха, повторяющиеся символы и геодезическая интерполяция.
Основной объект, отвечающий за отрисовку линии, —
Polyline. Его визуальное поведение задаётся через свойство
strokeOptions, включающее три ключевых параметра:
strokeColor — цвет линии в формате HEX или
CSS-совместимом значенииstrokeOpacity — прозрачность от 0.0 до 1.0strokeWeight — толщина линии в пикселяхconst line = new google.maps.Polyline({
path: [
{ lat: 43.2389, lng: 76.8897 },
{ lat: 43.2565, lng: 76.9286 }
],
strokeColor: "#1a73e8",
strokeOpacity: 1.0,
strokeWeight: 4,
map: map
});
Эти параметры задают визуальный каркас линии, который применяется ко всем сегментам пути равномерно. Любое изменение значения приводит к немедленной перерисовке слоя.
Прозрачность линии используется для построения визуальной иерархии
слоёв. Чем ниже значение strokeOpacity, тем сильнее линия
интегрируется в фон карты, не перекрывая базовые тайлы.
Комбинация толщины и прозрачности позволяет создавать различные уровни значимости маршрутов:
strokeOpacity: 0.3,
strokeWeight: 8
Такая комбинация часто используется для фоновых маршрутов или зон покрытия, тогда как активные маршруты используют высокую непрозрачность и меньшую толщину.
Параметр geodesic изменяет способ интерполяции линии
между точками. При значении true линия строится по
кратчайшему пути на поверхности сферы, а не по прямой проекции на
карту.
const geodesicLine = new google.maps.Polyline({
path: pathCoordinates,
geodesic: true,
strokeColor: "#34a853",
strokeWeight: 3,
map: map
});
Геодезические линии особенно важны при отображении больших расстояний, где искажения проекции становятся визуально заметными.
Для создания пунктирных, штриховых или комбинированных линий
используется свойство icons. Оно позволяет накладывать
символы вдоль линии с заданным интервалом.
const dashedLine = new google.maps.Polyline({
path: pathCoordinates,
strokeOpacity: 0,
icons: [{
icon: {
path: 'M 0,-1 0,1',
strokeOpacity: 1,
scale: 4
},
offset: '0',
repeat: '20px'
}],
map: map
});
Здесь ключевую роль играет:
strokeOpacity: 0 — скрывает основную линиюicons — задаёт визуальные сегментыrepeat — определяет шаг повторения символаСимволы позволяют создавать более сложные визуальные эффекты:
стрелки, точки, направленные маркеры. Они определяются через
SymbolPath или кастомный SVG-путь.
const arrowSymbol = {
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
scale: 3,
strokeColor: "#000000"
};
const arrowLine = new google.maps.Polyline({
path: pathCoordinates,
icons: [{
icon: arrowSymbol,
offset: '100%',
repeat: '50px'
}],
strokeOpacity: 0,
map: map
});
Стрелки могут использоваться для обозначения направления движения, потоков данных или маршрутов логистики.
Для максимальной кастомизации используется SVG path syntax. Это позволяет создавать уникальные маркеры и визуальные паттерны:
const customSymbol = {
path: 'M 0 0 L 10 0 L 5 10 z',
fillColor: "#ff0000",
fillOpacity: 1,
scale: 1
};
Такие символы могут быть повторены вдоль линии, создавая сложные декоративные или функциональные эффекты.
Стили линий могут изменяться в рантайме через методы
setOptions и setPath. Это позволяет создавать
интерактивные карты, реагирующие на действия пользователя.
line.setOptions({
strokeColor: "#e91e63",
strokeWeight: 6
});
Изменение параметров применяется мгновенно без необходимости пересоздания объекта.
Для реализации линий с разными визуальными участками используется разбиение пути на несколько Polyline объектов. Каждый сегмент получает собственный стиль.
new google.maps.Polyline({
path: segment1,
strokeColor: "#4285f4",
strokeWeight: 4,
map: map
});
new google.maps.Polyline({
path: segment2,
strokeColor: "#ea4335",
strokeWeight: 4,
map: map
});
Такой подход используется при отображении дорожных условий, статусов маршрута или зон покрытия.
Полигоны используют аналогичную модель стилизации для границ через
strokeOptions. Отличие заключается в наличии внутренней
заливки:
const polygon = new google.maps.Polygon({
paths: coordinates,
strokeColor: "#0000ff",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#0000ff",
fillOpacity: 0.2,
map: map
});
Граница полигона наследует те же принципы визуализации, что и Polyline, включая прозрачность, толщину и цвет.
Сложные стили линий, особенно с большим количеством символов, влияют на производительность рендеринга. Наиболее ресурсоёмкими являются:
iconsОптимизация достигается за счёт:
Линии участвуют в системе слоёв карты. Порядок отображения
определяется порядком добавления на карту и параметром
zIndex:
const priorityLine = new google.maps.Polyline({
path: pathCoordinates,
strokeColor: "#000",
strokeWeight: 5,
zIndex: 1000,
map: map
});
Линии с более высоким zIndex перекрывают другие
графические элементы, включая полигоны и маркеры.
Стили линий часто изменяются в ответ на события:
line.addListener("mouseover", () => {
line.setOptions({ strokeWeight: 8 });
});
line.addListener("mouseout", () => {
line.setOptions({ strokeWeight: 4 });
});
Такая модель позволяет реализовать поведение, близкое к UI-компонентам, где линия становится интерактивным элементом интерфейса карты.