Высотная информация в веб-картах строится на основе DEM (Digital Elevation Model) — цифровых моделей рельефа, где каждая точка хранит значение высоты над уровнем моря. В контексте Mapbox GL JS данные elevation используются для:
В экосистеме Mapbox источники elevation поставляются в виде тайловых
наборов данных и подключаются как специальные источники типа
raster-dem.
Основной формат данных высот в Mapbox GL JS — это:
{
"type": "raster-dem",
"url": "mapbox://mapbox.mapbox-terrain-dem-v1",
"tileSize": 512,
"maxzoom": 14
}
type: “raster-dem”
url
tileSize
maxzoom
DEM-источник сам по себе не создаёт рельеф. Он становится активным через настройку terrain:
map.on('load', () => {
map.addSource('terrain-source', {
type: 'raster-dem',
url: 'mapbox://mapbox.mapbox-terrain-dem-v1',
tileSize: 512,
maxzoom: 14
});
map.setTerrain({
source: 'terrain-source',
exaggeration: 1.5
});
});
exaggeration: 1.5
Контролирует вертикальное усиление рельефа:
1.0 — реальные значения высот<1.0 — сглаживание рельефа>1.0 — усиление перепадов высотЧасто используется готовый источник:
mapbox://mapbox.mapbox-terrain-dem-v1
Он представляет собой глобальный DEM на основе:
Данные оптимизированы под веб-рендеринг и разделены на тайлы.
Помимо DEM-тайлов Mapbox использует формат Terrain-RGB, где высота кодируется в цвете пикселя.
Каждый пиксель содержит:
Высота вычисляется по формуле:
height = -10000 + (R * 256 * 256 + G * 256 + B) * 0.1
map.addSource('dem', {
type: 'raster-dem',
url: 'mapbox://mapbox.mapbox-terrain-dem-v1',
tileSize: 512
});
map.addLayer({
id: 'hillshade',
type: 'hillshade',
source: 'dem'
});
Hillshade использует направление света для расчёта теней на основе высоты.
Рельеф напрямую влияет на позиционирование 3D-объектов:
map.setPitch(60);
map.setBearing(-20);
Mapbox GL JS предоставляет API для запроса высоты:
map.on('click', (e) => {
const elevation = map.queryTerrainElevation(e.lngLat);
console.log(elevation);
});
Возможна работа с несколькими DEM-слоями:
Пример:
map.addSource('local-dem', {
type: 'raster-dem',
tiles: [
'https://example.com/dem/{z}/{x}/{y}.png'
],
tileSize: 256
});
Приоритет определяется порядком подключения terrain.
Рельеф влияет на:
При включённом terrain камера работает в 3D-пространстве, где:
Типичная конфигурация карты с рельефом включает:
Elevation влияет на множество типов слоёв:
hillshade — освещение рельефаfill — полигоны с привязкой к поверхностиline — дороги на поверхности terrainsymbol — подписи с учётом высотыfill-extrusion — 3D объектыДля специализированных задач используются:
Формат остаётся совместимым с raster-dem спецификацией.
Elevation-данные формируют основу трёхмерной геовизуализации:
Рельеф становится не только визуальным элементом, но и вычисляемым пространственным слоем, на котором строится вся сцена.