В Leaflet все векторные примитивы — линии, полигоны, окружности и
маркеры-круги — наследуют единый набор параметров стиля. Эти параметры
передаются через объект options, который применяется при
создании слоя или изменяется динамически через
setStyle.
Ключевой особенностью архитектуры является разделение геометрии и визуального представления. Геометрия описывает координаты, а стиль управляет тем, как эти координаты отображаются на карте.
Основной параметр, определяющий внешний вид линий и контуров, —
color. Он задаёт цвет обводки для:
L.polylineL.polygonL.circleL.circleMarkerПример задания цвета при создании линии:
L.polyline([[55.75, 37.61], [55.76, 37.64]], {
color: '#3388ff'
}).addTo(map);
Цвет может быть задан в любом допустимом CSS-формате:
#ff0000)rgb(255,0,0))red)Для полигонов цвет применяется к границе, а не к заливке. Это важно учитывать при визуальном проектировании слоёв.
Параметр weight управляет толщиной обводки. Он задаётся
в пикселях и влияет на все векторные примитивы с линиями:
L.polyline(coords, {
color: 'blue',
weight: 8
}).addTo(map);
Поведение weight различается в зависимости от типа
слоя:
polyline — толщина линииpolygon — толщина границыcircle — толщина окружностиcircleMarker — влияет на размер обводки маркераПри увеличении масштаба карты толщина в пикселях остаётся фиксированной, так как Leaflet использует экранные единицы, а не географические.
Параметр opacity регулирует прозрачность обводки.
Значение находится в диапазоне от 0.0 до
1.0:
1.0 — полностью непрозрачная линия0.5 — полупрозрачная0.0 — полностью скрытаяПример:
L.polyline(coords, {
color: 'green',
weight: 4,
opacity: 0.6
}).addTo(map);
Важно, что opacity применяется только к линии (stroke),
но не к заливке.
Для полигонов и кругов существует отдельная группа параметров, отвечающих за внутреннюю область:
fillColor — цвет заливкиfillOpacity — прозрачность заливкиL.polygon(coords, {
color: 'black',
weight: 2,
fillColor: '#ffcc00',
fillOpacity: 0.4
}).addTo(map);
Если fillColor не задан, используется значение
color.
Если fillOpacity равен 0, заливка визуально
отсутствует, но геометрия остаётся интерактивной.
Leaflet использует классическую модель SVG:
Эта модель позволяет независимо управлять визуальными слоями объекта.
Типичное сочетание параметров:
{
color: '#000',
weight: 3,
opacity: 0.8,
fillColor: '#00aaff',
fillOpacity: 0.3
}
Такое разделение особенно важно при работе с административными границами и тепловыми картами на основе полигонов.
Параметр dashArray управляет шаблоном линии. Он задаёт
чередование сегментов и пробелов:
L.polyline(coords, {
color: 'purple',
weight: 3,
dashArray: '10 5'
}).addTo(map);
Формат строки:
"длина_штриха пробел длина_штриха пробел ..."
Примеры:
"5 5" — равномерный пунктир"10 2 2 2" — сложный ритмический узор"1 0" — почти сплошная линия с визуальными разрывами
отсутствующимиL.circle и L.circleMarker используют один и
тот же набор стилей, но различаются по логике размеров:
circle — радиус в метрах (географическая величина)circleMarker — радиус в пикселях (экранная
величина)Пример circle:
L.circle([55.75, 37.61], {
radius: 500,
color: 'red',
fillColor: '#f03',
fillOpacity: 0.3
}).addTo(map);
Пример circleMarker:
L.circleMarker([55.75, 37.61], {
radius: 10,
color: '#3388ff',
weight: 2,
fillOpacity: 0.5
}).addTo(map);
В случае circleMarker толщина обводки визуально влияет
на общий размер элемента сильнее, чем у географических кругов.
Leaflet позволяет изменять стили уже добавленных объектов через метод
setStyle:
const line = L.polyline(coords, {
color: 'blue',
weight: 4
}).addTo(map);
line.setStyle({
color: 'red',
weight: 6,
opacity: 0.9
});
Метод применим ко всем векторным слоям, кроме marker
(иконок), которые используют отдельную систему обновления.
При создании сложных слоёв с несколькими геометриями (например,
FeatureGroup) стиль может задаваться:
При конфликте приоритет получает стиль конкретного слоя.
L.featureGroup([
L.polyline(coords, { color: 'blue' }),
L.polygon(coords2, { color: 'green' })
], {
color: 'black'
}).addTo(map);
Здесь глобальный цвет группы не переопределяет локальные значения.
Комбинация opacity и fillOpacity часто
используется для построения визуальной иерархии слоёв:
Типичный паттерн:
{
color: '#444',
weight: 2,
opacity: 0.7,
fillColor: '#66ccff',
fillOpacity: 0.2
}
Такое сочетание позволяет одновременно сохранять читаемость границ и не перегружать карту.
Leaflet использует SVG для векторных слоёв (или Canvas в режиме
preferCanvas). Это влияет на интерпретацию стилей:
opacity применяется через SVG-атрибут
stroke-opacityfillOpacity — через fill-opacityweight — через stroke-widthПри Canvas-рендеринге возможны небольшие различия в антиалиасинге и восприятии прозрачности, особенно при наложении нескольких слоёв.
Сочетание всех параметров позволяет создавать сложные стили:
L.polygon(coords, {
color: '#000',
weight: 1,
opacity: 0.4,
fillColor: '#ff6600',
fillOpacity: 0.15,
dashArray: '4 6'
}).addTo(map);
Такой подход часто используется для:
Стили часто изменяются в ответ на события:
layer.on('mouseover', function () {
this.setStyle({
weight: 5,
fillOpacity: 0.6
});
});
layer.on('mouseout', function () {
this.setStyle({
weight: 2,
fillOpacity: 0.3
});
});
Такой механизм позволяет визуально выделять активные объекты без изменения геометрии или структуры слоя.