В MapLibre GL JS визуальное представление данных слоя определяется через две основные группы параметров: layout-свойства и paint-свойства. Если layout управляет геометрией и структурой отображения, то paint отвечает за визуальную стилизацию — цвет, прозрачность, обводки, размытие, градиенты, высоту и другие графические характеристики.
Paint-свойства применяются ко всем типам слоёв, но набор доступных параметров зависит от типа слоя: fill, line, circle, symbol, raster, heatmap, fill-extrusion и других. Каждое paint-свойство может быть статическим значением или выражением, зависящим от данных, масштаба или состояния карты.
Paint-конфигурация слоя задаётся внутри объекта слоя:
map.addLayer({
id: 'water-layer',
type: 'fill',
source: 'map-data',
'source-layer': 'water',
paint: {
'fill-color': '#2a6f97',
'fill-opacity': 0.8
}
});
Каждое свойство имеет строго определённый формат:
Paint-свойства поддерживают выражения, позволяющие строить адаптивную визуализацию:
'circle-radius': [
'interpolate',
['linear'],
['zoom'],
5, 2,
10, 6,
15, 12
]
Здесь радиус точки увеличивается при приближении карты. Такой подход позволяет создавать масштабируемую визуализацию без переключения стилей.
Другой пример — стилизация по свойствам данных:
'fill-color': [
'match',
['get', 'type'],
'forest', '#2e7d32',
'water', '#1565c0',
'urban', '#616161',
'#cccccc'
]
Fill-слои используются для полигонов: административные границы, водоёмы, зоны, здания.
Определяет цвет заливки полигона.
'fill-color': '#3b82f6'
Поддерживает выражения:
'fill-color': [
'interpolate',
['linear'],
['get', 'density'],
0, '#f0f9ff',
100, '#0ea5e9'
]
Управляет прозрачностью:
'fill-opacity': 0.5
Комбинация цвета и прозрачности часто используется для наложения слоёв без потери читаемости базовой карты.
Отдельный цвет обводки полигона:
'fill-outline-color': '#1e3a8a'
Особенно полезно при визуализации административных границ.
Позволяет использовать изображения вместо цвета:
'fill-pattern': 'diagonal-stripes'
Используется для тематических карт и выделения зон с дополнительной семантикой.
Line-слои применяются для маршрутов, границ, дорог и контуров.
Основной цвет линии:
'line-color': '#ef4444'
Поддерживает данные:
'line-color': [
'case',
['==', ['get', 'highway'], true],
'#ff0000',
'#999999'
]
Толщина линии:
'line-width': 3
С масштабированием:
'line-width': [
'interpolate',
['linear'],
['zoom'],
5, 0.5,
10, 2,
15, 6
]
Прозрачность линии:
'line-opacity': 0.7
Создание пунктирных линий:
'line-dasharray': [2, 1]
Используется для границ, временных маршрутов, ограничений.
Размытие линии:
'line-blur': 1.5
Позволяет создавать эффекты свечения и мягких контуров.
Circle-слои используются для точечных данных: города, объекты, события.
Радиус точки:
'circle-radius': 6
С данными:
'circle-radius': [
'interpolate',
['linear'],
['get', 'population'],
1000, 2,
1000000, 10
]
Цвет маркера:
'circle-color': '#22c55e'
Прозрачность:
'circle-opacity': 0.9
Обводка точки:
'circle-stroke-color': '#ffffff',
'circle-stroke-width': 2
Обводка критически важна при плотной визуализации данных.
Используются для построения 3D-объектов, чаще всего зданий.
Цвет 3D-объекта:
'fill-extrusion-color': '#a3a3a3'
С данными:
'fill-extrusion-color': [
'interpolate',
['linear'],
['get', 'height'],
0, '#d1d5db',
100, '#374151'
]
Высота экструдирования:
'fill-extrusion-height': ['get', 'height']
Прозрачность 3D:
'fill-extrusion-opacity': 0.8
Базовая высота:
'fill-extrusion-base': ['get', 'min_height']
Позволяет строить реалистичные здания с учётом рельефа.
Heatmap-слои визуализируют плотность точек.
Цветовая шкала плотности:
'heatmap-color': [
'interpolate',
['linear'],
['heatmap-density'],
0, 'rgba(0,0,255,0)',
0.5, 'rgba(0,255,0,0.5)',
1, 'rgba(255,0,0,1)'
]
Интенсивность влияния точек:
'heatmap-intensity': 1.2
Радиус влияния точки:
'heatmap-radius': 20
Общая прозрачность:
'heatmap-opacity': 0.6
Фон карты задаётся через background-слой.
'background-color': '#0f172a'
'background-opacity': 1
Paint-свойства активно используют zoom-based стилизацию. Это позволяет менять визуализацию в зависимости от масштаба карты.
Пример:
'circle-radius': [
'interpolate',
['exponential', 1.5],
['zoom'],
3, 1,
10, 5,
18, 20
]
Такой подход применяется для:
Paint может реагировать на интерактивные состояния объектов:
'fill-color': [
'case',
['boolean', ['feature-state', 'hover'], false],
'#f59e0b',
'#3b82f6'
]
Это используется для:
Некоторые paint-свойства поддерживают плавные переходы:
paint: {
'fill-opacity': 0.7,
'fill-opacity-transition': {
duration: 300,
delay: 0
}
}
Transition применяется к изменениям значений и позволяет избежать резких визуальных скачков.
Если одно и то же свойство задано несколькими механизмами (статически
и через expression), приоритет имеет expression. При обновлении слоя
через setPaintProperty значение заменяет предыдущее
полностью:
map.setPaintProperty('water-layer', 'fill-color', '#1e40af');
Paint-свойства напрямую влияют на рендеринг WebGL-контекста:
Оптимизация достигается за счёт: