HERE Maps API использует WebGL-рендеринг и векторную модель сцены, где экструдированные полигоны представляют собой двумерные геометрии с добавленной высотой, превращающей их в трёхмерные объекты. Такой подход применяется для визуализации зданий, зон застройки, территориальных границ, инфраструктурных объектов и любых площадных данных, требующих объёмного представления.
Экструдированный полигон в контексте картографического рендера — это замкнутый контур, которому присваивается вертикальное смещение вдоль оси Z. В двумерной проекции полигон задаётся набором координат:
После применения экструзии добавляется третий параметр — высота, определяющая степень «выдавливания» объекта.
Внутренне система рендеринга преобразует каждую грань полигона в набор треугольников, формируя:
В 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 определяет высоту
выдавливания. В зависимости от версии рендера он может
интерпретироваться как абсолютная или относительная высота в метрах.
Экструдированные полигоны чаще всего используются вместе с:
При использовании векторных тайлов данные поступают уже сегментированными, что позволяет применять экструзию на уровне стиля без изменения исходной геометрии.
Экструдированные объекты поддерживают расширенную стилизацию:
Типичная визуальная логика:
Это создаёт эффект объёмной городской застройки.
Высота полигона может изменяться в реальном времени. Это используется для:
Пример динамического изменения:
polygon.setStyle({
fillColor: 'rgba(255, 0, 0, 0.5)',
extrusionHeight: value * 10
});
Изменение стиля не требует пересоздания объекта, что важно для производительности при работе с большим количеством полигонов.
Экструдированные полигоны являются основой 3D-городов. На их основе формируются:
При подключении слоёв зданий система автоматически подставляет высоту из атрибутов данных (например, number of floors или absolute height).
В типичном сценарии:
heightЭффект экструзии напрямую зависит от параметров камеры:
При малом зуме экструзия почти не заметна, при увеличении — становится основным элементом сцены.
Перспективная проекция усиливает ощущение объёма, а ортографическая — минимизирует его, оставляя только форму.
При работе с большим количеством экструдированных полигонов критично учитывать:
Оптимизационные практики включают:
WebGL-рендерер выполняет батчинг геометрии, но перегрузка сцены большим числом высокополигональных объектов приводит к снижению FPS.
Экструдированные полигоны имеют ряд технических ограничений:
Также важно учитывать, что экструзия применяется в экранном пространстве, поэтому визуальный результат зависит от угла обзора.
Экструдированные полигоны сохраняют полноценную интерактивность:
Это позволяет использовать их как интерактивные элементы интерфейса геопространственных приложений, включая выбор зданий, районов и зон анализа данных.