Hillshade в Mapbox GL JS представляет собой способ визуализации рельефа поверхности с помощью имитации освещения. Основная идея заключается в преобразовании цифровой модели рельефа (DEM, Digital Elevation Model) в полутоновое изображение, где каждая точка получает значение яркости в зависимости от угла падения виртуального света. Это позволяет воспринимать высоту и форму местности интуитивно, даже без изолиний или 3D-модели.
Основа hillshade-слоя — это raster-dem источник, содержащий данные высот.
В Mapbox GL JS чаще всего используются тайлы с кодированием высот, например Terrain-RGB:
map.addSource('terrain-dem', {
type: 'raster-dem',
url: 'mapbox://mapbox.terrain-rgb',
tileSize: 512,
maxzoom: 14
});
Ключевые особенности DEM:
Hillshade вычисляется на основе геометрии поверхности и положения источника света.
Алгоритм включает:
Упрощённо:
В Mapbox GL JS hillshade реализуется как слой типа
hillshade, связанный с raster-dem
источником.
map.addLayer({
id: 'hillshade-layer',
type: 'hillshade',
source: 'terrain-dem',
paint: {
'hillshade-exaggeration': 0.5
}
});
Контролирует усиление рельефа.
1 — усиление перепадов высот
'hillshade-exaggeration': 1.2
Цвет теневых областей.
'hillshade-shadow-color': '#2b2b2b'
Используется для настройки визуальной глубины рельефа.
Цвет освещённых участков.
'hillshade-highlight-color': '#ffffff'
Позволяет имитировать более яркое освещение.
Цвет промежуточных участков рельефа.
'hillshade-accent-color': '#6e6e6e'
Используется для сглаживания переходов между светом и тенью.
Определяет направление источника света в градусах.
'hillshade-illumination-direction': 315
Определяет систему координат источника света:
map — свет фиксирован относительно картыviewport — свет фиксирован относительно экрана'hillshade-illumination-anchor': 'viewport'
Hillshade часто используется совместно с 3D-рельефом.
map.setTerrain({
source: 'terrain-dem',
exaggeration: 1.5
});
При этом hillshade может накладываться поверх или использоваться как альтернатива 3D-экструзии.
Hillshade динамически пересчитывается при изменении масштаба:
Важно учитывать:
Работа hillshade зависит от плотности DEM-данных.
Факторы влияния:
Рекомендации:
Hillshade редко используется изолированно. Типичные комбинации:
map.addLayer({
id: 'roads',
type: 'line',
source: 'vector-source',
'source-layer': 'roads'
});
Рельеф подчеркивает структуру дорожной сети.
Hillshade усиливает читаемость границ природных объектов.
Часто применяется мягкая цветовая база + hillshade поверх:
Hillshade не является точной 3D-моделью, его цель — визуальная интерпретация рельефа.
Характерные эффекты:
hillshade-exaggeration, приводящий к
«рваному» рельефу;Типичная настройка слоя включает три элемента:
map.on('load', () => {
map.addSource('terrain-dem', {
type: 'raster-dem',
url: 'mapbox://mapbox.terrain-rgb',
tileSize: 512
});
map.setTerrain({
source: 'terrain-dem',
exaggeration: 1.3
});
map.addLayer({
id: 'hillshade',
type: 'hillshade',
source: 'terrain-dem',
paint: {
'hillshade-exaggeration': 0.8,
'hillshade-shadow-color': '#1a1a1a',
'hillshade-highlight-color': '#ffffff',
'hillshade-accent-color': '#888888',
'hillshade-illumination-direction': 315,
'hillshade-illumination-anchor': 'viewport'
}
});
});
Hillshade выполняет функцию промежуточного слоя между 2D-картой и полноценной 3D-визуализацией. Он усиливает восприятие рельефа без значительных затрат на вычисление геометрии в браузере и остаётся одним из наиболее эффективных способов отображения высот в веб-картографии.