Экструдированные полигоны

HERE Maps API использует WebGL-рендеринг и векторную модель сцены, где экструдированные полигоны представляют собой двумерные геометрии с добавленной высотой, превращающей их в трёхмерные объекты. Такой подход применяется для визуализации зданий, зон застройки, территориальных границ, инфраструктурных объектов и любых площадных данных, требующих объёмного представления.

Экструдированный полигон в контексте картографического рендера — это замкнутый контур, которому присваивается вертикальное смещение вдоль оси Z. В двумерной проекции полигон задаётся набором координат:

  • широта (latitude)
  • долгота (longitude)

После применения экструзии добавляется третий параметр — высота, определяющая степень «выдавливания» объекта.

Внутренне система рендеринга преобразует каждую грань полигона в набор треугольников, формируя:

  • верхнюю крышу (top face)
  • боковые стенки (side faces)
  • иногда нижнюю грань (bottom face), если требуется замкнутый объём

Поддержка в архитектуре HERE Maps

В HERE Technologies WebGL-движок опирается на стилизацию объектов через слой стилей (style layers), где экструзия задаётся параметрами визуализации полигона.

Основная идея заключается в разделении:

  • геометрии (данные координат)
  • стиля (визуальное представление)
  • сцены (камера, освещение, перспектива)

Это позволяет динамически менять высоту и внешний вид без пересоздания геометрии.

Создание полигона с экструзией

В JavaScript API полигоны задаются через стандартные геометрические объекты, после чего к ним применяется стиль с параметрами высоты.

Пример базового подхода:

const coordinates = [
  { lat: 52.530, lng: 13.384 },
  { lat: 52.530, lng: 13.394 },
  { lat: 52.525, lng: 13.394 },
  { lat: 52.525, lng: 13.384 }
];

const polygon = new H.map.Polygon(
  new H.geo.Polygon(new H.geo.LineString(coordinates)),
  {
    style: {
      fillColor: 'rgba(0, 128, 255, 0.6)',
      strokeColor: '#2a2a2a',
      lineWidth: 1,
      extrusionHeight: 120
    }
  }
);

map.addObject(polygon);

Ключевой параметр extrusionHeight определяет высоту выдавливания. В зависимости от версии рендера он может интерпретироваться как абсолютная или относительная высота в метрах.

Векторные слои и источники данных

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

  • пользовательскими GeoJSON-слоями
  • тайловыми векторными слоями
  • данными зданий (building footprints)
  • административными границами

При использовании векторных тайлов данные поступают уже сегментированными, что позволяет применять экструзию на уровне стиля без изменения исходной геометрии.

Стилизация и визуальные эффекты

Экструдированные объекты поддерживают расширенную стилизацию:

  • цвет граней (верх/боковые поверхности могут различаться)
  • градиенты высоты
  • прозрачность
  • тени (в WebGL-режиме)
  • реакция на освещение сцены

Типичная визуальная логика:

  • верхняя грань светлее
  • боковые стенки затемнены
  • тень зависит от положения камеры и источника света

Это создаёт эффект объёмной городской застройки.

Динамическая экструзия

Высота полигона может изменяться в реальном времени. Это используется для:

  • визуализации плотности данных
  • отображения статистических значений
  • построения интерактивных 3D-диаграмм на карте

Пример динамического изменения:

polygon.setStyle({
  fillColor: 'rgba(255, 0, 0, 0.5)',
  extrusionHeight: value * 10
});

Изменение стиля не требует пересоздания объекта, что важно для производительности при работе с большим количеством полигонов.

Применение в моделировании городской среды

Экструдированные полигоны являются основой 3D-городов. На их основе формируются:

  • контуры зданий
  • кварталы
  • промышленные зоны
  • инфраструктурные объекты

При подключении слоёв зданий система автоматически подставляет высоту из атрибутов данных (например, number of floors или absolute height).

В типичном сценарии:

  • контур здания берётся из геоданных
  • высота берётся из атрибута height
  • экструзия применяется на этапе рендеринга

Работа с перспективой и камерой

Эффект экструзии напрямую зависит от параметров камеры:

  • угол наклона (tilt)
  • азимут (bearing)
  • уровень зума (zoom)

При малом зуме экструзия почти не заметна, при увеличении — становится основным элементом сцены.

Перспективная проекция усиливает ощущение объёма, а ортографическая — минимизирует его, оставляя только форму.

Производительность и оптимизация

При работе с большим количеством экструдированных полигонов критично учитывать:

  • количество вершин
  • сложность геометрии
  • частоту обновления стилей

Оптимизационные практики включают:

  • упрощение контуров (simplification)
  • группировку объектов в слои
  • использование векторных тайлов вместо отдельных объектов
  • минимизацию динамических обновлений высоты

WebGL-рендерер выполняет батчинг геометрии, но перегрузка сцены большим числом высокополигональных объектов приводит к снижению FPS.

Ограничения и особенности рендеринга

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

  • самопересекающиеся полигоны дают артефакты
  • слишком малые высоты визуально теряются
  • высокие значения экструзии могут выходить за пределы сцены
  • сложные контуры увеличивают нагрузку на триангуляцию

Также важно учитывать, что экструзия применяется в экранном пространстве, поэтому визуальный результат зависит от угла обзора.

Интерактивность объектов

Экструдированные полигоны сохраняют полноценную интерактивность:

  • обработка кликов
  • наведение курсора
  • выделение объектов
  • изменение состояния по событиям

Это позволяет использовать их как интерактивные элементы интерфейса геопространственных приложений, включая выбор зданий, районов и зон анализа данных.