Векторные объекты в Leaflet (полилинии, полигоны, окружности,
GeoJSON-геометрии) используют единый набор параметров стилизации,
основанный на концепции Path options. Эти параметры
применяются ко всем классам, наследующимся от L.Path,
включая L.Polyline, L.Polygon,
L.Circle, L.GeoJSON.
Ключевая особенность модели заключается в том, что стиль задаётся
либо при создании слоя, либо динамически через метод
setStyle, либо через функцию стиля для наборов данных.
Основу визуального представления векторных объектов формирует контур (stroke). За него отвечают следующие параметры:
color Определяет цвет линии или границы полигона.
L.polyline(latlngs, {
color: '#3388ff'
});
Используется любой валидный CSS-формат: hex, rgb, rgba, именованные цвета.
weight Толщина линии в пикселях.
{
weight: 5
}
Увеличение значения делает контур более массивным, уменьшение — визуально облегчает карту.
opacity Прозрачность обводки в диапазоне от
0 до 1.
{
opacity: 0.7
}
Используется для визуальной интеграции слоёв с подложкой.
lineCap Определяет форму концов линии:
butt — обрезанныеround — округлыеsquare — квадратные выступающие{
lineCap: 'round'
}
lineJoin Определяет форму соединений сегментов:
round — сглаженные углыbevel — срезанные углыmiter — острые углы{
lineJoin: 'miter'
}
Для полигонов и окружностей доступна внутренняя заливка.
fill Включает или отключает заливку.
{
fill: true
}
При false отображается только контур.
fillColor Цвет заливки. Если не задан, используется
color.
{
fillColor: '#ff7800'
}
fillOpacity Прозрачность заливки.
{
fillOpacity: 0.4
}
Часто используется для создания слоёв плотности, тепловых контуров и административных границ.
dashArray Определяет шаблон штриховки линии.
{
dashArray: '10, 5'
}
Используется для обозначения границ, маршрутов, временных или виртуальных объектов.
dashOffset Смещение штриховки вдоль линии.
{
dashOffset: '20'
}
Позволяет анимировать движение линии или синхронизировать стиль с другими слоями.
interactive Определяет, реагирует ли объект на события мыши.
{
interactive: true
}
При false слой не участвует в событиях
click, mouseover, mouseout.
className CSS-класс для SVG-элемента.
{
className: 'custom-vector-layer'
}
Используется для глубокой кастомизации через CSS:
.custom-vector-layer {
filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
}
stroke Включает или отключает отрисовку контура.
{
stroke: true
}
При false линия полностью скрывается, даже если задан
color.
pane Определяет слой (pane), в котором рисуется объект.
{
pane: 'overlayPane'
}
Позволяет управлять порядком наложения векторных слоёв относительно друг друга и растровых тайлов.
renderer Выбор механизма рендеринга:
L.svg() — SVG-рендерер (по умолчанию)L.canvas() — Canvas-рендерер{
renderer: L.canvas()
}
Canvas предпочтителен при большом количестве объектов, SVG — при необходимости DOM-интерактивности.
После создания слоя стиль можно изменять без пересоздания объекта.
const line = L.polyline(latlngs, { color: 'blue', weight: 3 });
line.setStyle({
color: 'red',
weight: 6
});
Метод setStyle работает для всех
L.Path-объектов и применяется к уже отрисованной
геометрии.
Для сложных наборов данных используется функция, возвращающая объект стилей.
L.geoJSON(data, {
style: function (feature) {
return {
color: feature.properties.color,
weight: feature.properties.weight,
fillColor: feature.properties.fill,
fillOpacity: 0.5
};
}
});
Такой подход позволяет:
Векторные слои используют систему наследования стилей:
setStyleПри конфликте приоритет получает наиболее специфичный уровень.
L.Circle и L.CircleMarker наследуют все
Path options, но имеют особенности:
Circle радиус задаётся в метрахCircleMarker радиус фиксирован в пикселяхL.circle([51.5, -0.1], {
radius: 500,
color: 'blue',
fillColor: '#30f',
fillOpacity: 0.3
});
При большом количестве векторных объектов ключевую роль играет баланс параметров:
weight снижает визуальную перегрузкуopacity вместо изменения цвета упрощает
восприятие слоёвCanvas уменьшает нагрузку на DOMinteractive для фоновых слоёв ускоряет
обработку событийLeaflet генерирует SVG-элементы, которые можно стилизовать через CSS,
используя className:
{
className: 'roads-layer'
}
.roads-layer path {
stroke-dasharray: 8 4;
stroke-width: 2;
}
Такой подход позволяет разделять логику и визуальное оформление, особенно в крупных проектах.
Комбинации параметров позволяют создавать сложные визуальные эффекты:
{
color: '#1f78b4',
weight: 2,
opacity: 0.9,
fillColor: '#a6cee3',
fillOpacity: 0.4,
dashArray: '4 6',
lineJoin: 'round'
}
Стили часто изменяются в ответ на события:
function highlight(e) {
e.target.setStyle({
weight: 5,
color: '#666'
});
}
function reset(e) {
geojson.resetStyle(e.target);
}
Такой механизм используется для подсветки объектов при наведении или выборе.