В Leaflet полигоны представляют собой один из базовых типов векторных слоёв, предназначенных для отображения площадных объектов на карте. Их визуальное оформление строится через набор стилевых параметров, среди которых ключевую роль играет заливка (fill). Именно она формирует восприятие площади объекта, отделяя его от фоновой карты и других слоёв.
Каждый полигон в Leaflet наследует поведение от абстрактного класса Path. Это означает, что все параметры отображения задаются через единый объект стиля, применяемый при создании слоя или изменении его свойств.
Основные параметры заливки:
Базовая структура задания стиля:
L.polygon(latlngs, {
fill: true,
fillColor: '#3388ff',
fillOpacity: 0.5,
color: '#1f4f99',
weight: 2
}).addTo(map);
Параметр fillColor принимает любое CSS-совместимое
значение цвета: HEX, RGB, RGBA, HSL.
Использование фиксированного цвета:
fillColor: '#2ecc71'
Использование прозрачного формата:
fillColor: 'rgba(46, 204, 113, 0.6)'
Приоритет между fillColor и color разделяет
визуальные функции: первый отвечает за площадь, второй — за границу.
Визуальная читаемость картографических данных часто зависит от контраста
между ними.
fillOpacity регулирует степень видимости слоя заливки.
Значения варьируются от 0 до 1.
fillOpacity: 0.2
При значениях, близких к 0, полигоны становятся вспомогательными визуальными элементами. При значениях 0.6–0.8 достигается плотное перекрытие, характерное для тематических карт.
Комбинация с обводкой:
L.polygon(latlngs, {
fillColor: '#e74c3c',
fillOpacity: 0.35,
color: '#c0392b',
weight: 1
});
В некоторых сценариях требуется отображение только контуров. Для
этого используется параметр fill: false.
L.polygon(latlngs, {
fill: false,
color: '#3498db'
});
Такой подход применяется при визуализации границ административных объектов или кадастровых зон, где площадь не несёт дополнительной семантической нагрузки.
Параметр fillRule управляет тем, как интерпретируются
пересекающиеся области внутри сложных полигонов.
Доступные значения:
evenoddnonzeroПример:
L.polygon(latlngs, {
fillColor: '#8e44ad',
fillOpacity: 0.4,
fillRule: 'evenodd'
});
evenodd часто используется для корректного отображения
полигонов с «дырами» (holes), особенно в GeoJSON-структурах.
При работе с геоданными стандартным способом является использование
GeoJSON-слоёв. В этом случае стилизация задаётся через функцию
style.
L.geoJSON(geojsonData, {
style: function (feature) {
return {
fillColor: '#f1c40f',
fillOpacity: 0.5,
color: '#d4ac0d',
weight: 1
};
}
}).addTo(map);
Каждый объект может получать индивидуальную заливку в зависимости от атрибутов:
style: function (feature) {
return {
fillColor: feature.properties.density > 50 ? '#e74c3c' : '#2ecc71',
fillOpacity: 0.6
};
}
Мультиполигоны позволяют описывать сложные геометрии, состоящие из нескольких независимых областей. Заливка применяется ко всей группе как к единому объекту.
L.polygon([
[
[55.75, 37.61],
[55.76, 37.62],
[55.74, 37.64]
],
[
[55.73, 37.60],
[55.72, 37.63],
[55.71, 37.61]
]
], {
fillColor: '#16a085',
fillOpacity: 0.4
});
Каждый внутренний контур интерпретируется как часть общей структуры заливки.
Одной из особенностей Leaflet является поддержка внутренних контуров, создающих «дырки» внутри полигона.
L.polygon([
outerRing,
holeRing
], {
fillColor: '#2980b9',
fillOpacity: 0.5
});
В таких случаях важно корректное применение fillRule,
иначе заливка может интерпретировать внутренние области некорректно.
Стили полигонов могут изменяться после их создания через метод
setStyle.
polygon.setStyle({
fillColor: '#9b59b6',
fillOpacity: 0.7
});
Динамическое изменение используется в интерактивных сценариях: выделение областей, визуализация состояния объектов, реакция на события.
Заливка часто используется как индикатор состояния при обработке событий мыши:
polygon.on('mouseover', function () {
this.setStyle({
fillOpacity: 0.8
});
});
polygon.on('mouseout', function () {
this.setStyle({
fillOpacity: 0.4
});
});
Подобные изменения позволяют визуально отделять активные области без изменения геометрии.
Стиль полигона может задаваться на нескольких уровнях:
setStyleПриоритет всегда отдаётся последнему применённому значению.
При работе с плотными слоями важно учитывать стоимость перерисовки заливки. Наиболее ресурсоёмкие параметры:
setStyleОптимизация достигается через:
LayerGroupLeaflet использует SVG или Canvas для отрисовки полигонов. Заливка в
SVG интерпретируется через fill атрибут, в Canvas — через
контекст fillStyle.
Различия влияют на производительность и поведение прозрачности при наложении слоёв. Canvas предпочтителен при большом количестве объектов, SVG — при необходимости точного взаимодействия с DOM.
Стандартный API Leaflet не включает нативную поддержку градиентов, однако через SVG можно задавать кастомные определения:
fillColor: 'url(#gradient)'
Градиенты определяются через defs SVG-слоя, что
позволяет создавать более сложные визуальные эффекты для тематических
карт.
Заливка часто используется совместно с tooltip-слоями, где визуальная насыщенность усиливает контекст данных:
polygon.bindTooltip('Область данных', {
sticky: true
});
При этом прозрачность заливки влияет на читаемость подложки карты OpenStreetMap, особенно в плотных городских слоях.
Расширения Leaflet позволяют использовать паттерны заливки (штриховка, точки, диагонали). Они реализуются через плагины и SVG-маски, где вместо сплошного цвета применяется текстурный слой.
Такие методы применяются для: