Z-индекс в рендеринге карт в HERE Technologies и JavaScript API играет ключевую роль в управлении визуальной иерархией объектов. Любая карта представляет собой многослойную сцену, где элементы конкурируют за порядок отображения: тайлы, маркеры, полигоны, линии маршрутов, интерактивные оверлеи и пользовательские элементы интерфейса.
Визуальная модель карты строится как стек слоёв. Каждый слой имеет собственную систему приоритета, определяющую, что будет отображено выше:
Порядок этих элементов не всегда фиксирован, так как большинство объектов поддерживает параметр zIndex или аналогичную систему приоритетов.
В JavaScript API HERE Maps JavaScript API управление z-index чаще
всего применяется к объектам слоя H.map.Object.
Каждый графический объект может иметь свой приоритет отображения:
MarkerCirclePolylinePolygonRectObjectКлючевое свойство:
object.setZIndex(10);
или при создании:
const marker = new H.map.Marker(coords, {
zIndex: 5
});
Чем больше значение zIndex, тем выше объект располагается визуально.
Рендерер карты не использует только абсолютный порядок добавления объектов. Вместо этого учитываются несколько факторов:
При конфликте значений приоритет обычно определяется следующим образом:
Маркер — один из наиболее частых объектов, где требуется контроль порядка. При наложении нескольких маркеров на одной координате используется zIndex:
const markerA = new H.map.Marker({ lat: 52.5, lng: 13.4 }, { zIndex: 1 });
const markerB = new H.map.Marker({ lat: 52.5, lng: 13.4 }, { zIndex: 10 });
Marker с большим значением перекрывает остальные независимо от порядка добавления в карту.
Дополнительно учитывается:
Геометрические объекты требуют особого подхода, поскольку они могут пересекаться в пространстве.
polyline.setZIndex(3);
Используется для управления перекрытием маршрутов, например:
Для полигонов важен не только zIndex, но и порядок заливки и обводки:
Значение zIndex влияет на всю геометрию целиком.
Карты HERE используют систему слоёв, где каждый слой имеет собственный контекст рендеринга.
Основные типы слоёв:
TileLayer — базовая картаVectorLayer — векторные данныеObjectsLayer — пользовательские объектыUI Layer — интерфейсные элементыСлои сами по себе имеют порядок отображения, который может перекрывать zIndex внутри них. Это означает:
zIndex работает внутри слоя, но не всегда между слоями
Объекты могут объединяться в группы:
const group = new H.map.Group();
group.setZIndex(7);
Особенность групп:
Это особенно важно при работе с кластерами маркеров.
HTML-оверлеи (DOM-based overlays) часто выходят за пределы canvas-рендеринга карты. Их порядок определяется отдельно:
z-indexВ результате DOM-элементы могут полностью игнорировать zIndex объектов карты.
Типичная проблема:
Z-index может изменяться в runtime:
map.addEventListener('tap', function (evt) {
const obj = evt.target;
obj.setZIndex(100);
});
Сценарии:
Важно учитывать, что изменение zIndex может вызывать перерасчёт порядка отрисовки.
Конфликты возникают при:
Решение зависит от контекста:
Для сложных карт применяется стратегия диапазонов:
Такой подход снижает вероятность пересечений и упрощает поддержку логики отображения.
Изменение zIndex влияет на:
Частые изменения большого количества объектов могут привести к:
Оптимизация достигается: