В веб-картографии растровые слои представляют собой изображения, получаемые в виде тайлов (PNG, JPEG, WEBP), которые накладываются на векторную или другую растровую подложку. В контексте MapLibre GL JS управление прозрачностью таких слоёв является ключевым механизмом для построения многослойных карт, объединяющих спутниковые снимки, топографические подложки, погодные данные и пользовательские визуализации.
Прозрачность в растровом слое формируется на нескольких уровнях:
1. Альфа-канал изображения
2. Серверная генерация тайлов
3. Клиентская интерполяция прозрачности
Итоговая визуальная непрозрачность пикселя формируется как произведение альфа-канала изображения и параметра слоя.
Основной механизм управления прозрачностью в MapLibre GL JS —
свойство raster-opacity.
map.addLayer({
id: "satellite",
type: "raster",
source: "satellite-source",
paint: {
"raster-opacity": 0.7
}
});
0.0 → полностью прозрачный слой1.0 → полная непрозрачностьpaint: {
"raster-opacity": [
"interpolate",
["linear"],
["zoom"],
5, 1,
10, 0.4
]
}
Такой подход используется для плавного «растворения» спутникового слоя при увеличении масштаба.
Растровая прозрачность напрямую зависит от порядка слоёв в стиле.
Пример:
map.addLayer({
id: "base",
type: "raster",
source: "osm"
});
map.addLayer({
id: "overlay",
type: "raster",
source: "satellite",
paint: {
"raster-opacity": 0.5
}
});
Здесь satellite накладывается поверх OSM, создавая смешанную подложку.
Внутри MapLibre GL JS используется WebGL-композиция, где каждый пиксель проходит стадию blending.
Упрощённая модель:
result = src * alpha + dst * (1 - alpha)
Где:
src — пиксель текущего растрового тайлаdst — уже отрисованный фонalpha — итоговая прозрачность (raster-opacity ×
alpha-канал)При загрузке тайлов MapLibre применяет кроссфейд между старой и новой текстурой.
paint: {
"raster-opacity": 1,
"raster-fade-duration": 300
}
При значении 0 переход становится мгновенным, что может
вызывать «рваную» подгрузку.
Растровый слой в MapLibre GL JS может дополнительно модифицироваться через paint-свойства:
raster-brightness-minraster-brightness-maxraster-contrastraster-saturationraster-hue-rotateХотя эти параметры не изменяют alpha напрямую, они влияют на визуальное восприятие прозрачности.
Пример:
paint: {
"raster-opacity": 0.6,
"raster-brightness-min": 0.2,
"raster-brightness-max": 0.9,
"raster-saturation": 0.5
}
При сниженной насыщенности полупрозрачный слой визуально «растворяется» сильнее, чем следует из численного opacity.
Одним из наиболее мощных инструментов является привязка прозрачности к zoom level.
"raster-opacity": [
"step",
["zoom"],
0.2,
6,
0.6,
10,
1.0
]
При использовании нескольких растровых источников возникают типичные эффекты:
Решение обычно заключается в строгом управлении opacity и порядке слоёв.
При использовании high-DPI тайлов (retina tiles):
Растровая прозрачность влияет на производительность GPU:
Практический эффект:
Растровая прозрачность становится особенно значимой при комбинировании с векторной графикой:
Типичная структура: