В экосистеме Mapbox GL JS слой типа fill-extrusion
предназначен для построения трёхмерных объектов на основе полигонов. Он
используется для визуализации зданий, рельефных форм, инфраструктуры и
любых областных геометрий с заданной высотой. Ключевым параметром,
определяющим нижнюю границу экструдированного объекта, является
fill-extrusion-base.
fill-extrusion-base задаёт высоту основания
(нижнюю границу) 3D-экструзии. В отличие от
fill-extrusion-height, который определяет верхнюю точку
объекта, fill-extrusion-base формирует стартовую плоскость
выдавливания.
Таким образом, экструдированный объект описывается диапазоном:
fill-extrusion-basefill-extrusion-heightЕсли base не задан, он по умолчанию равен нулю, и объект
«растёт» от поверхности карты.
Для каждого полигона в слое выполняется вертикальное выдавливание:
baseheightМатематически это можно представить как интервал высот:
z ∈ [base, height]
Где:
base — стартовая высотаheight — конечная высотаНаиболее простая конфигурация слоя с заполненной высотой и базой:
map.addLayer({
id: 'buildings-3d',
type: 'fill-extrusion',
source: 'composite',
'source-layer': 'building',
paint: {
'fill-extrusion-color': '#aaa',
'fill-extrusion-height': ['get', 'height'],
'fill-extrusion-base': ['get', 'min_height'],
'fill-extrusion-opacity': 0.9
}
});
В данном примере:
height определяет верх зданияmin_height определяет начало экструзии| Параметр | Назначение | Роль в модели |
|---|---|---|
| fill-extrusion-height | Верхняя граница | максимальная высота объекта |
| fill-extrusion-base | Нижняя граница | стартовая высота объекта |
Без base все объекты считаются начинающимися с уровня
земли, что упрощает модель, но искажает реальную структуру
многоуровневых зданий.
Чаще всего fill-extrusion-base задаётся через свойства
источника данных:
'fill-extrusion-base': ['get', 'min_height']
Типичный набор атрибутов:
height — общая высота зданияmin_height — высота основания (например, подиум,
стилобат)Если данные отсутствуют, используется fallback:
'fill-extrusion-base': ['coalesce', ['get', 'min_height'], 0]
fill-extrusion-base поддерживает выражения Mapbox Style
Specification, что позволяет изменять базу в зависимости от масштаба или
атрибутов.
'fill-extrusion-base': [
'interpolate',
['linear'],
['zoom'],
15, 0,
20, ['get', 'min_height']
]
На малых зумах здания «прижаты» к земле, а на высоких появляется реальная архитектурная структура.
Корректная 3D-модель требует согласованной пары:
'fill-extrusion-height': ['get', 'height'],
'fill-extrusion-base': ['get', 'min_height']
Если нарушить логику:
base > height → объект исчезаетbase = height → нулевая высота (плоскость)base < 0 → объект уходит под уровень картыИспользование min_height позволяет отображать:
Для мостов и эстакад:
'fill-extrusion-base': 10,
'fill-extrusion-height': 40
Задаёт визуальное «подвешивание» объекта над землёй.
При работе с данными о плотности застройки можно использовать
base для выделения уровней:
fill-extrusion-base напрямую влияет на:
light)При неправильной настройке возможны артефакты:
При использовании освещения сцены (light) база влияет на
формирование теней:
map.setLight({
anchor: 'map',
color: 'white',
intensity: 0.5
});
Тени от объектов начинаются от base, что делает важным
точное определение этого параметра для реалистичной сцены.
Если:
'fill-extrusion-base': 0
то объект всегда будет начинаться от поверхности карты. Это упрощает визуализацию, но лишает модель многоуровневости.
Отсутствие base при наличии
min_height
Использование неконсистентных данных
height < min_height ломает геометриюНеправильные единицы измерения
При большом количестве экструдированных объектов:
base на каждом кадреinterpolateСтатические значения fill-extrusion-base рендерятся
быстрее, чем вычисляемые через сложные expressions.
При использовании pitch и bearing:
fill-extrusion-base формирует нижнюю плоскость касания
сценыmin_heightОсобенно критично при углах наклона выше 45°.
В стандартных тайлах зданий часто используются поля:
render_min_heightrender_heightили их аналоги. Они напрямую маппятся на:
fill-extrusion-base → min_height
fill-extrusion-height → height
fill-extrusion-base определяет:
Без него 3D-слой превращается в упрощённую модель без вертикальной структуры, тогда как при корректной настройке становится полноценной архитектурной визуализацией городской среды.