Назначение и концепция
3D-экструзии
Fill-extrusion слой предназначен для визуализации трёхмерных объектов
на основе двумерных полигонов. Основная идея заключается в том, что
геометрия поверхности (polygon) «выдавливается» по вертикали с
использованием атрибутов высоты, формируя объёмные объекты прямо в
WebGL-сцене.
Ключевая особенность подхода — отсутствие полноценной 3D-модели:
объекты строятся процедурно из 2D-данных. Это обеспечивает высокую
производительность при отображении городских сцен, особенно при работе с
векторными тайлами.
Fill-extrusion широко используется для:
- визуализации зданий;
- отображения рельефа (условно, через сегментированные полигоны);
- построения аналитических 3D-диаграмм (например, плотность данных по
районам);
- стилизованных карт с объёмной символикой.
Источник данных для
extrusion
Fill-extrusion слой работает исключительно с полигональными данными.
Наиболее распространённые источники:
Векторные тайлы
Наиболее производительный вариант. Данные приходят уже в
оптимизированном виде:
- геометрия зданий;
- атрибуты высоты;
- идентификаторы объектов;
- дополнительные свойства для стилизации.
GeoJSON
Используется для небольших наборов данных или прототипирования.
Основные ограничения:
- отсутствие тайловой оптимизации;
- снижение производительности на больших объёмах;
- отсутствие встроенного кеширования на уровне клиента.
Базовая структура
fill-extrusion слоя
Слой описывается через конфигурацию
type: "fill-extrusion" внутри стиля карты.
Пример логической структуры:
source — источник данных (vector/geojson)
source-layer — слой внутри векторного тайла
paint — визуальные свойства extrusion
layout — редко используется, так как геометрия
фиксирована
Основные параметры paint
fill-extrusion-height
Определяет высоту объекта в метрах (или единицах данных
источника).
Типичный вариант:
- фиксированное значение;
- привязка к атрибуту;
- вычисляемое выражение.
Высота может быть динамической:
- по атрибуту здания (
height)
- по количеству этажей (
levels * constant)
- через интерполяцию zoom-dependent значений
fill-extrusion-base
Определяет базовую высоту (нижнюю границу экструзии). Используется
для:
- моделирования зданий на рельефе;
- корректного отображения многоуровневых объектов;
- визуального отделения объектов от поверхности карты.
fill-extrusion-color
Цвет боковых граней и верхней поверхности. Поддерживаются:
- статические цвета;
- data-driven стилизация;
- интерполяция по высоте или другим атрибутам.
Часто применяется градиентная логика:
- низкие здания — светлые;
- высокие — более насыщенные или тёмные.
fill-extrusion-opacity
Контролирует прозрачность всей extrusion-геометрии.
Особенности:
- влияет на производительность при низких значениях (из-за
blending);
- может использоваться для эффектов «сканирования» города;
- позволяет визуально совмещать слои.
fill-extrusion-pattern
Позволяет применять текстуры вместо однотонного цвета.
Используется для:
- имитации фасадов;
- стилизованных карт;
- визуальных эффектов плотной городской застройки.
Работа с выражениями
(Expressions)
Fill-extrusion слой активно использует выражения MapLibre Style
Specification.
Пример динамической высоты
Высота зависит от атрибута:
- здания:
["get", "height"]
- этажность:
["*", ["get", "levels"], 3]
Интерполяция по zoom
При увеличении масштаба можно плавно «выращивать» здания:
- на малом zoom — низкие или скрытые объекты;
- на большом zoom — полная высота.
Это достигается через interpolate:
- линейная интерполяция;
- экспоненциальная для более резкого эффекта.
Z-order и визуальные
особенности
Fill-extrusion слой подчиняется правилам сортировки WebGL:
- порядок отрисовки зависит от высоты камеры;
- нет полной геометрической глубины между объектами одного слоя;
- пересечения упрощаются для оптимизации.
Важно учитывать:
- перекрытия зданий корректны только визуально;
- физической коллизии между объектами нет;
- сортировка происходит по тайлам, а не по отдельным полигонам.
Оптимизация
производительности
Использование векторных
тайлов
Главный фактор производительности — источник данных. Векторные тайлы
обеспечивают:
- предсказуемую загрузку;
- оптимизированную геометрию;
- кэширование на стороне клиента.
Ограничение количества
вершин
Чрезмерно сложные полигоны ухудшают производительность:
- упрощение геометрии на сервере;
- генерализация контуров зданий;
- удаление лишних узлов.
Минимизация paint-вычислений
Сложные выражения в paint выполняются на GPU, но их
количество влияет на:
- стоимость пересчёта стилей;
- частоту обновлений при zoom/pan.
Использование minzoom/maxzoom
Ограничение диапазона отображения снижает нагрузку:
- extrusion не рендерится на низких масштабах;
- включается только при детальном просмотре.
Типичные сценарии применения
3D города
Основной кейс — визуализация городской застройки:
- плотность зданий;
- высотные профили;
- архитектурные особенности районов.
Аналитические карты
Fill-extrusion используется для отображения:
- плотности населения;
- статистики продаж;
- интенсивности событий.
Высота становится метафорой величины показателя.
Симуляционные модели
В некоторых системах extrusion применяется для:
- прогнозирования роста городов;
- моделирования застройки;
- визуализации сценариев развития инфраструктуры.
Ограничения модели
fill-extrusion
Отсутствие реальной
3D-геометрии
Экструзия — это процедурная визуализация:
- нет наклонных поверхностей;
- нет сложных архитектурных форм;
- отсутствуют отверстия и внутренние структуры.
Ограниченная физика света
Освещение упрощено:
- псевдо-тени;
- фиксированное направление света;
- отсутствие глобального освещения.
Зависимость от качества
данных
Результат напрямую зависит от источника:
- нет высоты — объект плоский;
- нет корректной базы — здания «висят»;
- нет атрибутов — невозможна дифференциация.
Стилизация и визуальные
эффекты
Цветовые градиенты по высоте
Распространённый приём:
- низкие значения → холодные цвета;
- высокие → тёплые или насыщенные.
Эффект «ночного города»
Используются:
- тёмные базовые цвета;
- светящиеся верхние поверхности;
- минимальная прозрачность.
Псевдо-реализм
Комбинации:
- текстурированные фасады;
- вариативная высота;
- мягкая цветовая коррекция.
Интеграция с другими слоями
Fill-extrusion часто комбинируется с:
Symbol слоями
- подписи зданий;
- POI метки;
- номера домов.
Line слоями
- дороги;
- границы кварталов;
- транспортные сети.
Fill слоями
- районы;
- зоны застройки;
- административные границы.
Комбинация создаёт многослойную 3D-карту, где extrusion служит
базовой геометрической массой сцены.