3D-представление в Kepler.gl строится поверх архитектуры deck.gl, где геометрия слоя отделена от его визуального поведения. Высота объектов не является самостоятельной сущностью — она задаётся через параметры рендеринга слоёв и интерпретируется GPU как смещение по оси Z.
Ключевая идея: любое 2D-геопространство может быть «поднято» в третье измерение через атрибуты данных и настройки слоя. При этом высота может быть как фиксированной, так и вычисляемой на основе полей данных.
Основные механизмы 3D-экструзии:
Полигональные данные получают объём через параметр
extruded. В основе лежит преобразование плоского полигона в
призму.
Внутри deck.gl используется PolygonLayer, где включение
3D-режима активирует построение боковых граней.
Ключевые параметры:
Математически высота каждого полигона может быть выражена как:
h = f(d) s
где f(d) — функция, извлекающая значение из данных, а
s — масштабирование слоя.
Полигональная экструзия активно применяется для:
HexagonLayer выполняет H3-агрегацию данных и формирует шестиугольные ячейки, каждая из которых получает высоту на основе агрегированного значения.
Основные особенности:
Высота ячейки формируется как функция агрегата:
h = _{i=1}^{n} w_i
или в нормализованном виде:
h =
Типичные агрегаты:
HexagonLayer обеспечивает визуализацию плотности событий, например:
ColumnLayer используется для построения вертикальных столбцов над точками. Каждый столбец представляет отдельную запись данных.
Ключевые параметры:
getElevation — высота столбцаradius — радиус основанияdiskResolution — гладкость цилиндраelevationScale — масштабированиеВ отличие от полигонов, ColumnLayer работает с точками и генерирует цилиндрические формы.
Высота может зависеть от:
Параметр elevationScale отвечает за визуальное усиление
или ослабление вертикального измерения.
Он применяется ко всем слоям, поддерживающим 3D:
Фактически он масштабирует результат функции высоты:
h’ = h k
где k — коэффициент усиления.
Использование этого параметра критично при:
3D-эффект в Kepler.gl зависит не только от высоты объектов, но и от параметров камеры.
Основные параметры состояния карты:
При pitch = 0 сцена остаётся плоской, даже если экструзия включена. При увеличении pitch появляется перспектива, раскрывающая вертикальные различия.
Комбинация pitch и bearing определяет восприятие глубины:
3D-слои в Kepler.gl используют модель освещения, основанную на WebGL.
Материал слоя включает:
Это позволяет воспринимать высоту не как абстрактную величину, а как физический объект.
Влияние освещения особенно заметно на:
Без освещения высота теряет визуальную читаемость, превращаясь в плоскую шкалу.
Высота в Kepler.gl всегда вычисляется из данных через функции доступа.
Типовой механизм:
getElevation: d => d.valuegetElevation: d => d.countgetElevation: d => d.metricA + d.metricBПри этом возможны преобразования:
Логарифмическое преобразование часто используется для сглаживания распределений:
h = (1 + x)
Это особенно важно при работе с данными, имеющими экспоненциальное распределение (например, население или доходы).
При работе с GeoJSON каждый объект преобразуется в набор треугольников (tessellation). Это необходимо для корректного построения боковых граней.
Процесс включает:
Сложные полигоны с отверстиями требуют дополнительной обработки:
Ошибки в структуре GeoJSON приводят к искажению экструзии или исчезновению граней.
При наложении нескольких 3D-слоёв возникает проблема визуальной конкуренции высот.
Типичные сценарии:
Решение заключается в:
Также используется разнесение по масштабу:
3D-визуализация напрямую зависит от GPU и количества вершин.
Факторы влияния:
Оптимизации включают:
При больших наборах данных агрегация становится обязательной, иначе рендеринг теряет стабильность FPS.
Высота может изменяться во времени, что позволяет строить динамические 3D-сцены.
Типовые сценарии:
Интерполяция высоты задаётся как функция времени:
h(t) = h_0 + (h_1 - h_0) t
где t ∈ [0,1] — прогресс анимации.
Kepler.gl использует плавные переходы через интерполяцию WebGL-шейдеров, минимизируя скачки геометрии.
Высота редко используется изолированно. Она комбинируется с цветом для многомерной визуализации.
Распространённые схемы:
Такая комбинация позволяет:
Несмотря на гибкость, 3D-экструзия имеет структурные ограничения:
Эти ограничения компенсируются агрегацией и правильной настройкой масштаба высоты.