Raster-dem источник в Mapbox GL JS предназначен для работы с растровыми цифровыми моделями рельефа (Digital Elevation Model, DEM). Он используется для загрузки тайлов, содержащих данные высот, и последующего преобразования их в информацию о геометрии местности, применяемую в рендеринге 3D-террейна, теней рельефа и аналитических визуализаций.
Raster-dem слой отличается от обычных raster-тайлов тем, что каждый
пиксель кодирует не цвет, а высоту. На уровне Mapbox GL JS такие данные
становятся основой для генерации геометрии земли через
terrain API и визуальных эффектов, таких как hillshade.
Источник задаётся через type: "raster-dem" в
конфигурации карты. Он поддерживает тайлы форматов RGB или
Terrarium-encoded DEM, где высота вычисляется из цветовых каналов.
Базовая структура:
map.addSource("terrain-dem", {
type: "raster-dem",
url: "mapbox://mapbox.terrain-rgb",
tileSize: 512,
maxzoom: 14
});
Ключевые параметры:
"raster-dem"mapbox или terrarium)Raster DEM не хранит высоту напрямую. Она кодируется в RGB-каналах изображения.
В случае стандартного формата Mapbox используется формула:
[ height = -10000 + ]
Каждый пиксель:
Такое кодирование позволяет хранить отрицательные и положительные значения высот.
Альтернативный формат использует другую схему:
[ height = (R + G + ) - 32768]
Он часто применяется в открытых источниках DEM-тайлов.
Raster-dem источник становится полезным только в связке с
terrain параметром карты.
map.setTerrain({
source: "terrain-dem",
exaggeration: 1.5
});
Параметр exaggeration управляет вертикальным
масштабированием рельефа:
1.0 — реальная высота<1.0 — сглаженный рельеф>1.0 — усиление перепадов высотRaster-dem часто применяется совместно с hillshade слоем
для визуализации освещения рельефа.
map.addLayer({
id: "hillshade-layer",
type: "hillshade",
source: "terrain-dem"
});
Hillshade использует производные значения высоты для расчёта освещения:
Это позволяет создавать визуально читаемый рельеф даже без текстур.
Raster-dem источники имеют ряд технических ограничений:
Высота интерполируется из пиксельной сетки. При низком zoom уровне возможны:
DEM-тайлы увеличивают нагрузку на:
Особенно заметно при высоком exaggeration.
В некоторых регионах:
При загрузке тайла происходит цепочка преобразований:
Каждый шаг выполняется с использованием WebGL-пайплайна, что позволяет обрабатывать большие массивы данных без CPU-рендеринга.
Возможна комбинация нескольких raster-dem источников:
map.addSource("local-dem", {
type: "raster-dem",
url: "mapbox://custom.local-terrain",
tileSize: 256
});
Приоритет определяется порядком подключения terrain:
map.setTerrain({
source: "local-dem",
exaggeration: 2.0
});
Такой подход применяется для:
Raster-dem источник является основой для:
fill-extrusion (3D здания)sky layer (небо и атмосфера)Terrain влияет на все последующие слои, создавая единое пространство координат с высотой.
Mapbox GL JS использует встроенное кэширование DEM тайлов:
Оптимизационные практики:
maxzoomexaggeration при слабых устройствахЕсли raster-dem источник не подключён, карта остаётся 2D, а:
Это важно учитывать при динамическом переключении режимов карты.