Источники elevation

Рельеф как часть картографического слоя

Высотная информация в веб-картах строится на основе DEM (Digital Elevation Model) — цифровых моделей рельефа, где каждая точка хранит значение высоты над уровнем моря. В контексте Mapbox GL JS данные elevation используются для:

  • построения трёхмерного рельефа (terrain)
  • визуализации теней рельефа (hillshade)
  • вычисления высоты в координатах
  • создания 3D-сцен с наклоном и перспективой

В экосистеме Mapbox источники elevation поставляются в виде тайловых наборов данных и подключаются как специальные источники типа raster-dem.


Тип источника: raster-dem

Основной формат данных высот в Mapbox GL JS — это:

{
  "type": "raster-dem",
  "url": "mapbox://mapbox.mapbox-terrain-dem-v1",
  "tileSize": 512,
  "maxzoom": 14
}

Ключевые свойства

type: “raster-dem”

  • определяет источник как набор высотных тайлов

url

  • ссылка на набор DEM-тайлов
  • чаще всего используется Mapbox Terrain DEM

tileSize

  • размер тайла в пикселях (256 или 512)
  • влияет на детализацию и производительность

maxzoom

  • максимальный уровень приближения данных

Подключение elevation через terrain

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

exaggeration: 1.5

Контролирует вертикальное усиление рельефа:

  • 1.0 — реальные значения высот
  • <1.0 — сглаживание рельефа
  • >1.0 — усиление перепадов высот

Встроенные источники Mapbox Terrain

Часто используется готовый источник:

mapbox://mapbox.mapbox-terrain-dem-v1

Он представляет собой глобальный DEM на основе:

  • спутниковых данных
  • SRTM (Shuttle Radar Topography Mission)
  • LiDAR-данных (в отдельных регионах)
  • интерполяции недостающих зон

Данные оптимизированы под веб-рендеринг и разделены на тайлы.


Формат Terrain-RGB

Помимо DEM-тайлов Mapbox использует формат Terrain-RGB, где высота кодируется в цвете пикселя.

Принцип кодирования

Каждый пиксель содержит:

  • R (красный канал)
  • G (зелёный канал)
  • B (синий канал)

Высота вычисляется по формуле:

height = -10000 + (R * 256 * 256 + G * 256 + B) * 0.1

Особенности формата

  • высокая точность (до сантиметров в некоторых наборах)
  • компактное хранение
  • совместимость с raster tiles
  • возможность декодирования в шейдерах

Использование DEM для визуальных слоёв

Hillshade (теневой рельеф)

map.addSource('dem', {
  type: 'raster-dem',
  url: 'mapbox://mapbox.mapbox-terrain-dem-v1',
  tileSize: 512
});

map.addLayer({
  id: 'hillshade',
  type: 'hillshade',
  source: 'dem'
});

Hillshade использует направление света для расчёта теней на основе высоты.


Связь elevation и 3D-зданий

Рельеф напрямую влияет на позиционирование 3D-объектов:

  • здания “сидят” на поверхности terrain
  • модели учитывают высоту подложки
  • корректируется перспектива камеры
map.setPitch(60);
map.setBearing(-20);

Получение высоты в координате

Mapbox GL JS предоставляет API для запроса высоты:

map.on('click', (e) => {
  const elevation = map.queryTerrainElevation(e.lngLat);
  console.log(elevation);
});

Особенности

  • возвращается высота в метрах
  • учитывается текущий terrain
  • требует активного DEM-источника

Комбинирование нескольких elevation-источников

Возможна работа с несколькими DEM-слоями:

  • глобальный базовый DEM (Mapbox Terrain)
  • локальные высокодетализированные LiDAR-данные
  • кастомные raster-dem источники

Пример:

map.addSource('local-dem', {
  type: 'raster-dem',
  tiles: [
    'https://example.com/dem/{z}/{x}/{y}.png'
  ],
  tileSize: 256
});

Приоритет определяется порядком подключения terrain.


Ограничения DEM-источников

Разрешение

  • глобальные DEM имеют ограничение по детализации
  • городские области требуют локальных данных

Производительность

  • увеличение tileSize повышает нагрузку
  • terrain с высоким exaggeration требует больше GPU ресурсов

Пустоты в данных

  • океаны и полярные области могут содержать интерполяции
  • иногда применяются сглаживающие алгоритмы

Взаимодействие elevation и камеры

Рельеф влияет на:

  • матрицу проекции
  • глубину сцены
  • перспективное искажение
  • клиппинг объектов

При включённом terrain камера работает в 3D-пространстве, где:

  • Z — высота DEM
  • X/Y — географические координаты

Практическая структура источников elevation

Типичная конфигурация карты с рельефом включает:

  1. raster-dem источник
  2. terrain активацию
  3. hillshade слой (опционально)
  4. 3D здания (fill-extrusion)
  5. настройку камеры

Взаимосвязь DEM и визуальных слоёв

Elevation влияет на множество типов слоёв:

  • hillshade — освещение рельефа
  • fill — полигоны с привязкой к поверхности
  • line — дороги на поверхности terrain
  • symbol — подписи с учётом высоты
  • fill-extrusion — 3D объекты

Кастомные DEM-источники

Для специализированных задач используются:

  • локальные геологические модели
  • городские цифровые двойники
  • данные дронов (photogrammetry)
  • LiDAR-профили высокой плотности

Формат остаётся совместимым с raster-dem спецификацией.


Роль elevation в 3D-картографии

Elevation-данные формируют основу трёхмерной геовизуализации:

  • реалистичные горные системы
  • городские ландшафты
  • визуализация маршрутов с перепадом высот
  • анализ уклонов и профилей местности

Рельеф становится не только визуальным элементом, но и вычисляемым пространственным слоем, на котором строится вся сцена.