Растровый слой (raster) в MapLibre GL JS используется
для отображения предварительно отрендеренных изображений карты,
поставляемых в виде тайлов (tiles). В отличие от векторных слоёв, где
геометрия и стилизация выполняются на стороне клиента, растровый слой
работает с готовыми изображениями, что переносит вычислительную нагрузку
на сервер тайлов.
Архитектурно raster-слой является обёрткой над источником типа
raster, который описывает, откуда загружать изображения и
как их интерпретировать в пространстве карты.
Основой растрового слоя выступает источник
raster source. Он может быть определён через:
tiles)url)tileSize)map.addSource('satellite', {
type: 'raster',
tiles: [
'https://server.example.com/tiles/{z}/{x}/{y}.png'
],
tileSize: 256,
minzoom: 0,
maxzoom: 19
});
map.addSource('terrain', {
type: 'raster',
url: 'https://example.com/tiles.json'
});
TileJSON позволяет централизованно описывать параметры тайлового сервиса: URL, zoom диапазоны, формат и метаданные.
Raster слой в стиле MapLibre GL JS добавляется через
addLayer и связывается с ранее созданным источником.
map.addLayer({
id: 'satellite-layer',
type: 'raster',
source: 'satellite',
paint: {
'raster-opacity': 1.0
}
});
Слой raster не содержит геометрических свойств, таких как
layout для линий или полигонов, так как отображает уже
готовые изображения.
Определяет прозрачность растрового слоя.
paint: {
'raster-opacity': 0.7
}
Диапазон значений: от 0 до 1.
Позволяет вращать цветовой тон изображения.
paint: {
'raster-hue-rotate': 90
}
Используется для стилистической подгонки спутниковых или подложечных слоёв.
Контролируют яркость растрового изображения.
paint: {
'raster-brightness-min': 0.2,
'raster-brightness-max': 0.9
}
Позволяют адаптировать подложку под темные или светлые стили интерфейса.
Управляет насыщенностью изображения.
paint: {
'raster-saturation': -0.5
}
Отрицательные значения уменьшают насыщенность, положительные усиливают.
Регулирует контрастность растрового слоя.
paint: {
'raster-contrast': 0.3
}
Определяет метод интерполяции при масштабировании тайлов.
Возможные значения:
linearnearestpaint: {
'raster-resampling': 'linear'
}
linear используется для сглаживания,
nearest — для пиксельной точности (например, ретро-карты
или пиксель-арт).
Raster-слои опираются на классическую XYZ-структуру:
/{z}/{x}/{y}.png
z — уровень масштабированияx — индекс тайла по горизонталиy — индекс тайла по вертикалиПри увеличении масштаба увеличивается количество загружаемых тайлов экспоненциально, что делает важной оптимизацию серверной части.
Параметр tileSize определяет физический размер тайла в
пикселях.
tileSize: 256
или
tileSize: 512
512px тайлы уменьшают количество запросов и улучшают качество при масштабировании, но увеличивают вес каждого изображения.
Raster слой не пересчитывает геометрию — вместо этого применяются следующие стратегии:
При переходах между zoom уровнями используется плавное смешивание тайлов (fade), чтобы избежать резких скачков.
Плавность перехода между тайлами регулируется параметром:
paint: {
'raster-fade-duration': 300
}
Значение задаётся в миллисекундах.
Механизм обеспечивает плавное появление новых тайлов при изменении масштаба.
Источник raster может быть ограничен географическими границами:
map.addSource('local', {
type: 'raster',
tiles: ['https://example.com/{z}/{x}/{y}.png'],
bounds: [-180, -85.0511, 180, 85.0511]
});
bounds задаётся в формате
[west, south, east, north].
Raster слой обладает следующими характеристиками производительности:
Ключевым фактором оптимизации является:
tileSizemaxzoomMapLibre GL JS позволяет накладывать несколько raster слоёв с управлением порядком:
map.addLayer({
id: 'base',
type: 'raster',
source: 'satellite'
});
map.addLayer({
id: 'overlay',
type: 'raster',
source: 'labels',
paint: {
'raster-opacity': 0.6
}
});
Это используется для:
Raster слой часто используется как фон для векторных данных:
Векторные слои остаются интерактивными, тогда как raster слой выступает визуальной основой.
Raster данные могут поступать из различных систем:
Некоторые серверы предоставляют WMS через прокси, конвертирующий запросы в XYZ.
WMS можно подключить через шаблон URL:
tiles: [
'https://server.example.com/wms?service=WMS&request=GetMap&bbox={bbox-epsg-3857}&width=256&height=256&format=image/png'
]
WMTS чаще используется через TileJSON или прямые шаблоны XYZ.
Raster слой сильно зависит от инфраструктуры доставки:
Отсутствие кэширования приводит к резкому снижению производительности при панорамировании карты.
Raster слои имеют фундаментальные ограничения:
Эти ограничения компенсируются простотой интеграции и высокой визуальной стабильностью.
const map = new maplibregl.Map({
container: 'map',
style: {
version: 8,
sources: {
satellite: {
type: 'raster',
tiles: [
'https://server.example.com/satellite/{z}/{x}/{y}.png'
],
tileSize: 256
}
},
layers: [
{
id: 'satellite-layer',
type: 'raster',
source: 'satellite',
paint: {
'raster-opacity': 1
}
}
]
},
center: [69.5901, 42.3417],
zoom: 10
});
При переключении стиля raster слои:
Это делает их предсказуемыми при динамической смене картографических тем.