Raster source представляет собой тип источника данных, в котором карта использует готовые растровые тайлы (изображения), а не векторные геометрии. Каждый тайл — это заранее отрендеренное изображение, обычно PNG или JPEG, полученное с сервера тайлов или из стороннего картографического сервиса.
Основная особенность raster source заключается в том, что визуализация данных уже «зашита» в изображение. Библиотека Mapbox GL JS лишь отображает и стилизует эти изображения на уровне слоя, не имея доступа к внутренней структуре объектов.
В Mapbox GL JS raster источник добавляется через метод
addSource:
map.on('load', () => {
map.addSource('raster-example', {
type: 'raster',
tiles: [
'https://example.com/tiles/{z}/{x}/{y}.png'
],
tileSize: 256
});
map.addLayer({
id: 'raster-layer',
type: 'raster',
source: 'raster-example'
});
});
Здесь ключевыми элементами являются:
type: 'raster' — определяет тип источникаtiles — шаблон URL для получения тайловtileSize — размер тайла в пикселях (обычно 256 или
512)Raster source может использовать разные типы серверов:
Наиболее распространённый формат:
https://server.com/{z}/{x}/{y}.png
{z} — уровень зума{x} и {y} — координаты тайлаТакой формат используется большинством тайловых серверов, включая OpenStreetMap-подобные сервисы.
Вместо явного списка tiles можно использовать описание
источника:
map.addSource('raster-source', {
type: 'raster',
url: 'https://example.com/tiles.json'
});
TileJSON может содержать:
Массив URL-шаблонов тайлов:
tiles: [
'https://tiles.server.com/{z}/{x}/{y}.jpg'
]
Можно указывать несколько серверов для балансировки нагрузки:
tiles: [
'https://a.tiles.com/{z}/{x}/{y}.png',
'https://b.tiles.com/{z}/{x}/{y}.png'
]
Альтернатива tiles, если используется TileJSON:
url: 'https://example.com/tiles.json'
Определяет размер одного тайла в пикселях:
tileSize: 256
или
tileSize: 512
512 используется для high-DPI карт и ретины.
Важно: Mapbox GL JS масштабирует тайлы автоматически в зависимости от device pixel ratio.
Ограничивают диапазон отображения:
minzoom: 0,
maxzoom: 18
minzoom — минимальный уровень детализацииmaxzoom — максимальный уровень детализацииЕсли пользователь выходит за пределы диапазона, тайлы перестают запрашиваться.
Ограничивает область действия источника:
bounds: [-180, -85, 180, 85]
Формат:
[west, south, east, north]
Используется для локальных карт или региональных слоёв.
Определяет схему нумерации тайлов:
scheme: 'xyz'
или
scheme: 'tms'
xyz — стандарт Google Maps / Mapboxtms — инвертированная ось Y (используется в некоторых
GIS-системах)Raster source сам по себе не отображается — он требует слоя
type: 'raster'.
map.addLayer({
id: 'satellite-layer',
type: 'raster',
source: 'satellite-source',
paint: {
'raster-opacity': 0.85
}
});
В отличие от векторных данных, raster слой имеет ограниченный набор визуальных свойств.
Прозрачность слоя:
'raster-opacity': 0.7
Контроль яркости:
'raster-brightness-min': 0.2,
'raster-brightness-max': 0.9
Используется для адаптации спутниковых снимков под подложку.
Контраст изображения:
'raster-contrast': 0.3
Насыщенность:
'raster-saturation': -0.5
Отрицательные значения «обесцвечивают» карту.
Поворот цветового тона:
'raster-hue-rotate': 180
Позволяет визуально перекрасить растровые данные без изменения источника.
Метод интерполяции:
'raster-resampling': 'linear'
Возможные значения:
linear — сглаживание (по умолчанию)nearest — резкие пиксели, без интерполяцииmap.addSource('terrain-raster', {
type: 'raster',
tiles: [
'https://terrain.example.com/{z}/{x}/{y}.png'
],
tileSize: 256,
minzoom: 1,
maxzoom: 16,
bounds: [20, 40, 50, 55],
scheme: 'xyz'
});
map.addLayer({
id: 'terrain-layer',
type: 'raster',
source: 'terrain-raster',
paint: {
'raster-opacity': 0.9,
'raster-brightness-min': 0.1,
'raster-brightness-max': 1.0,
'raster-saturation': 0.2,
'raster-contrast': 0.1
}
});
Raster данные имеют ряд архитектурных ограничений, напрямую влияющих на использование:
Mapbox GL JS не «понимает», что находится внутри изображения. Нельзя:
Каждый zoom требует готовых тайлов. Это означает:
Raster тайлы обычно тяжелее векторных:
Mapbox GL JS использует встроенное кэширование тайлов:
Рекомендации:
Raster source:
Vector source:
Raster source чаще применяется для:
WMS-слои часто подключаются через raster tiles:
map.addSource('wms-layer', {
type: 'raster',
tiles: [
'https://server.com/wms?service=WMS&request=GetMap&layers=layer1&bbox={bbox-epsg-3857}&width=256&height=256&format=image/png'
],
tileSize: 256
});
Здесь важно, что сервер возвращает уже готовое изображение, адаптированное под координаты тайла.
Raster source используется в ситуациях, где:
Часто raster layer выступает как базовый слой, поверх которого накладываются vector layers с интерактивными элементами.