3D здания

Работа с трёхмерными зданиями в картографических приложениях на базе HERE Technologies строится вокруг векторного рендеринга, геометрической экструзии и управления камерой сцены. В JavaScript API платформы HERE Maps API for JavaScript 3D-объекты зданий являются частью визуального слоя карты и формируются либо на основе готовых векторных тайлов, либо через программную экструзию полигонов.


Трёхмерные здания в HERE Maps не являются отдельными «моделями» в классическом смысле. Они формируются из 2D-геометрии с добавлением высотных данных:

  • контур здания берётся из векторных тайлов;
  • высота задаётся атрибутом (building height, min_height);
  • визуализация выполняется через extrusion в WebGL-рендерере.

Ключевая идея заключается в том, что карта остаётся векторной, а 3D-эффект создаётся на этапе отрисовки.


Режимы отображения зданий

В API можно выделить два основных подхода:

1. Встроенные 3D здания из векторного слоя

Векторный слой карты содержит категорию building, которая может быть активирована через стилизацию.

Основные характеристики:

  • автоматическая подгрузка данных;
  • единый стиль для всех зданий;
  • поддержка масштабирования и наклона;
  • оптимизация под WebGL.

В типичном стиле карта использует правила, определяющие:

  • заливку зданий;
  • высоту экструзии;
  • поведение при зуме.

2. Пользовательская экструзия геометрии

Второй подход основан на ручном создании 3D-объектов через API объектов карты.

Применяется классическая схема:

  • H.map.Polygon задаёт контур;
  • добавляется атрибут высоты;
  • объект добавляется на карту как 3D-форма.

Этот способ используется для:

  • кастомных зданий;
  • симуляций;
  • визуализации данных (например, плотности застройки).

Камера и восприятие 3D сцены

3D-здания становятся визуально корректными только при включённой перспективной камере.

Ключевые параметры:

  • tilt (наклон камеры) — создаёт перспективу;
  • bearing (поворот) — изменяет ориентацию сцены;
  • zoom (масштаб) — влияет на детализацию зданий.

Без наклона (tilt = 0) здания визуально «схлопываются» в плоскость.


Инициализация карты с поддержкой 3D

В классической конфигурации карта создаётся через H.Map, где базовый слой подключается через платформу.

Основные элементы инициализации:

  • platform — точка доступа к сервисам;
  • defaultLayers — набор слоёв;
  • map — объект сцены;
  • viewModel — управление камерой.

Критически важный момент: 3D-рендеринг активируется не отдельным флагом, а наличием векторного слоя и WebGL-движка.


Векторные тайлы и данные зданий

Здания поступают из векторных тайлов, содержащих:

  • геометрию (контуры);
  • высоту (height);
  • минимальную высоту (minHeight);
  • категорию объекта;
  • идентификаторы.

Эти данные позволяют строить здания различной сложности:

  • простые блоки;
  • ступенчатые формы;
  • комбинированные структуры.

Экструзия зданий (building extrusion)

Экструзия — ключевой механизм формирования 3D.

Логика:

  1. берётся 2D-полигон;
  2. вычисляется высота;
  3. геометрия «вытягивается» по оси Z;
  4. применяется освещение и тени.

Псевдоструктура объекта:

  • base polygon;
  • height;
  • material (цвет, текстура);
  • shading model.

Работа со стилями зданий

Стилизация в HERE Maps осуществляется через JSON-стили или Style Editor.

Основные параметры:

  • цвет фасада;
  • цвет крыши;
  • прозрачность;
  • высота экструзии;
  • поведение на разных zoom-level.

Пример логики стилизации:

  • на низком зуме здания упрощаются;
  • на среднем появляются базовые формы;
  • на высоком уровне детализации включаются мелкие структуры.

Управление освещением и тенями

3D-здания поддерживают базовую модель освещения:

  • направленный свет (симуляция солнца);
  • мягкие тени;
  • градиентная заливка граней.

Освещение влияет на:

  • читаемость высот;
  • визуальную глубину;
  • контраст между объектами.

Программное создание 3D зданий

При ручной генерации используется подход через полигональные объекты.

Основные шаги:

  • формирование координат контура;
  • создание объекта полигона;
  • назначение высоты;
  • добавление на карту.

Такие объекты интегрируются в общий слой и взаимодействуют с камерой как нативные здания.


Производительность 3D рендеринга

Отрисовка 3D-зданий зависит от нескольких факторов:

  • плотность городской застройки;
  • количество активных тайлов;
  • уровень детализации (LOD);
  • возможности GPU.

Оптимизация достигается через:

  • упрощение геометрии на дальних зумах;
  • батчинг объектов;
  • отключение лишних слоёв;
  • динамическую подгрузку тайлов.

LOD (Level of Detail)

Система уровней детализации критична для городских сцен:

  • LOD0 — упрощённые блоки;
  • LOD1 — базовая экструзия;
  • LOD2 — улучшенная геометрия;
  • LOD3 — высокая детализация (реже используется).

LOD выбирается автоматически в зависимости от масштаба и расстояния камеры.


Интерактивность зданий

3D-объекты могут участвовать в событиях карты:

  • hover;
  • click;
  • hit-test через ray casting.

Это позволяет:

  • выделять здания;
  • показывать информацию;
  • строить аналитические слои поверх застройки.

Сочетание 3D зданий с другими слоями

3D слой зданий взаимодействует с:

  • транспортными слоями;
  • слоями пробок;
  • погодными эффектами;
  • пользовательскими объектами.

При правильной композиции создаётся полноценная цифровая модель города.


Типовые проблемы при работе с 3D

Часто встречающиеся ограничения:

  • «плоская» карта из-за отсутствия tilt;
  • проседание FPS в плотной застройке;
  • конфликты стилей при кастомной визуализации;
  • несоответствие высот в данных.

Решения обычно связаны с оптимизацией слоя и корректной настройкой рендера.


Использование кастомных данных высот

При отсутствии высот в источнике данных применяются:

  • средние значения по районам;
  • процедурная генерация высот;
  • внешние GIS-источники.

Это позволяет сохранять визуальную целостность 3D-сцены даже при неполных данных.