В свойствах слоя типа fill-extrusion в Mapbox GL JS
параметр fill-extrusion-height определяет вертикальную
протяжённость 3D-объектов, задавая их высоту в метрах или в единицах,
интерпретируемых в контексте источника данных. Это ключевой атрибут при
построении трёхмерных визуализаций зданий, рельефных объектов и любых
полигонов, которые должны быть «выдавлены» вверх относительно
поверхности карты.
fill-extrusion-height управляет верхней гранью
экструдированного полигона. Каждый полигон, используемый в слое
fill-extrusion, превращается в объемную геометрическую
фигуру, где:
fill-extrusion-basefill-extrusion-heightФактически, высота вычисляется как разница между этими двумя значениями, если оба параметра заданы.
Если задан только fill-extrusion-height, объект
«вырастает» от нулевого уровня.
Параметр поддерживает несколько типов значений:
Пример статической высоты:
'fill-extrusion-height': 50
В этом случае все объекты будут иметь высоту 50 единиц.
Одной из ключевых возможностей является привязка высоты к атрибутам
GeoJSON или vector tiles. Например, если в данных присутствует поле
height, его можно использовать напрямую:
'fill-extrusion-height': ['get', 'height']
Это превращает карту в полноценную 3D-модель, где каждый объект имеет индивидуальную высоту.
Часто высота должна изменяться в зависимости от уровня масштаба. Например, здания могут визуально «расти» при увеличении зума:
'fill-extrusion-height': [
'interpolate',
['linear'],
['zoom'],
10, 0,
15, ['get', 'height']
]
На низком зуме здания практически не видны по высоте, а при приближении достигают реальной величины.
fill-extrusion-height почти всегда используется
совместно с fill-extrusion-base. Разница между ними
формирует «толщину» объекта.
'fill-extrusion-base': ['get', 'min_height'],
'fill-extrusion-height': ['get', 'height']
Если base равен 10, а height равен 60,
итоговая высота объекта составит 50 единиц.
Такой подход позволяет моделировать:
Высота в fill-extrusion-height интерпретируется в
метрах, если используется стандартная схема данных Mapbox Streets.
Однако фактическая интерпретация зависит от:
mapbox-gl в конкретной реализацииВажно учитывать, что визуальная высота может отличаться от реальных метров при нестандартных тайлах.
Mapbox GL JS позволяет использовать выражения для динамического управления высотой.
'fill-extrusion-height': [
'case',
['>', ['get', 'population'], 100000], 200,
['>', ['get', 'population'], 50000], 120,
60
]
Здесь высота зданий зависит от плотности населения или любого числового признака.
'fill-extrusion-height': [
'match',
['get', 'type'],
'residential', 50,
'commercial', 120,
'industrial', 80,
40
]
Такой подход позволяет визуально разделять типы объектов.
Использование fill-extrusion-height напрямую связано с
GPU-рендерингом. Однако сложные выражения могут влиять на
производительность:
get-выражения требуют доступа к атрибутам тайловinterpolate и case увеличивают
нагрузку на CPU при пересчёте стиляОптимизация достигается за счёт:
Высота объектов напрямую влияет на работу световых эффектов в 3D-сцене:
При использовании наклонов карты (pitch) значение
fill-extrusion-height становится ключевым фактором глубины
сцены.
Высота может изменяться не только от данных, но и от масштаба:
'fill-extrusion-height': [
'interpolate',
['exponential', 1.5],
['zoom'],
12, 0,
16, ['get', 'height']
]
Экспоненциальная интерполяция создаёт более резкий переход между уровнями детализации, что используется для эффектов «появления» города при приближении.
Если значение fill-extrusion-height равно 0:
fill-extrusion-base)Это часто применяется в анимациях появления зданий.
Некорректные настройки высоты приводят к визуальным артефактам:
fill-extrusion-base создаёт
«обрезанные» зданияПример ошибки:
'fill-extrusion-height': "100"
Здесь значение передано строкой, что может нарушить вычисления.
На практике fill-extrusion-height используется для:
В сочетании с источниками данных вроде vector tiles слой превращается в динамическую 3D-сцену, где каждый объект имеет индивидуальную геометрию.
Качество отображения высоты напрямую зависит от структуры данных:
При отсутствии поля высоты используется fallback-значение или выражение по умолчанию.
При изменении масштаба карты происходит перерасчёт визуального представления:
fill-extrusion-height могут
интерполироватьсяЭто делает слой подходящим для интерактивных 3D-сцен без заметных лагов.
Высота объектов определяет читаемость городской структуры:
Таким образом, fill-extrusion-height становится не
только техническим параметром, но и инструментом визуального кодирования
данных.