Визуальное представление объектов на карте в экосистеме HERE
Technologies строится вокруг маркеров и их иконок. Базовая сущность —
H.map.Marker, которая принимает географическую точку и
визуальный стиль через объект H.map.Icon.
Иконка задаётся либо URL изображения, либо набором параметров, определяющих поведение рендеринга:
const icon = new H.map.Icon('marker.png', {
size: { w: 32, h: 32 }
});
const marker = new H.map.Marker(
{ lat: 52.5, lng: 13.4 },
{ icon: icon }
);
map.addObject(marker);
Ключевым аспектом является разделение логики данных и визуального слоя. Геометрия маркера не зависит от изображения, что позволяет динамически менять внешний вид без изменения координат.
Каждая иконка имеет точку привязки (anchor), определяющую, какой пиксель изображения соответствует координате на карте.
const icon = new H.map.Icon('marker.png', {
anchor: { x: 16, y: 32 }
});
Если anchor не задан, используется нижний центральный край изображения. Это стандартное поведение для классических маркеров «капля».
Правильное позиционирование критично при использовании сложных иконок, где геометрический центр не совпадает с визуальным.
Современные карты используют устройства с высокой плотностью пикселей. Для корректного отображения применяются два подхода:
Пример адаптации:
const icon = new H.map.Icon('marker@2x.png', {
size: { w: 32, h: 32 }
});
Система рендеринга автоматически масштабирует изображение под текущий device pixel ratio при корректной подготовке ресурсов.
SVG обеспечивает масштабирование без потери качества и является предпочтительным форматом для динамических иконок.
const svgMarkup =
'<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">' +
'<circle cx="12" cy="12" r="10" fill="red"/></svg>';
const icon = new H.map.Icon(svgMarkup);
const marker = new H.map.Marker({ lat: 52.5, lng: 13.4 }, { icon });
map.addObject(marker);
SVG позволяет изменять цвет, форму и структуру иконки на лету, что особенно полезно при отображении состояний объектов (активен, неактивен, предупреждение).
Помимо растровых и векторных иконок применяется
H.map.DomIcon, позволяющий использовать HTML-разметку как
маркер.
const domIcon = new H.map.DomIcon('<div class="custom-marker"></div>');
const marker = new H.map.DomMarker(
{ lat: 52.5, lng: 13.4 },
{ icon: domIcon }
);
Такой подход открывает доступ к полноценным CSS-анимациям, теням, переходам и интерактивности внутри маркера.
Особенность DOM-маркеров — повышенная нагрузка на рендеринг при большом количестве объектов, что требует оптимизации через кластеризацию.
Иконка маркера может быть заменена в любой момент без пересоздания объекта:
marker.setIcon(new H.map.Icon('active.png'));
Это используется для отображения состояний:
При массовом обновлении предпочтительно минимизировать перерисовку слоя, чтобы избежать деградации производительности.
Помимо маркеров изображения могут использоваться как накладываемые
объекты (H.map.Overlay), фиксированные в координатах
карты.
const overlay = new H.map.Overlay(
new H.geo.Rect(52.4, 13.3, 52.6, 13.5),
'<img src="overlay.png" />'
);
map.addObject(overlay);
Такие изображения применяются для:
Для снижения числа HTTP-запросов применяется спрайтовая техника: несколько иконок объединяются в одно изображение.
const icon = new H.map.Icon('sprites.png', {
subRect: { x: 0, y: 0, w: 32, h: 32 }
});
Преимущества:
Недостатком является необходимость точного управления координатами вырезки.
При работе с большим количеством объектов используется кластеризация. Иконка кластера отображает агрегированное состояние группы точек.
const clusterIcon = new H.map.Icon('cluster.png');
const clusterMarker = new H.map.Marker(
cluster.getPosition(),
{ icon: clusterIcon }
);
В реальных сценариях текст внутри иконки формируется динамически, отражая количество объектов в кластере. Это часто реализуется через DOM-иконки.
Маркеры поддерживают обработку событий, что позволяет связывать визуальные элементы с логикой приложения:
marker.addEventListener('tap', function () {
console.log('Marker selected');
});
Иконки при этом остаются пассивным визуальным слоем, а интерактивность реализуется через сам объект маркера.
Порядок отображения иконок определяется порядком добавления объектов
и их свойством zIndex.
marker.setZIndex(10);
Это важно при наложении:
При увеличении числа маркеров основная нагрузка возникает в следующих областях:
Оптимизация достигается через:
Системы визуализации HERE Maps API for JavaScript используют аппаратное ускорение для работы с большим числом объектов, однако эффективность напрямую зависит от выбора типа иконок.
Иконки могут генерироваться программно, включая изменение цвета, текста и формы.
Пример генерации SVG с параметрами:
function createIcon(color) {
return new H.map.Icon(
`<svg width="24" height="24">
<rect width="24" height="24" fill="${color}"/>
</svg>`
);
}
Такой подход используется для отображения категорий объектов, статусов и приоритета данных.
Часто маркер включает иконку и текстовую подпись, реализуемую через DOM:
const domIcon = new H.map.DomIcon(
'<div class="marker">' +
'<div class="icon"></div>' +
'<div class="label">A</div>' +
'</div>'
);
Подписи могут быть закреплены относительно иконки с помощью CSS, что позволяет создавать сложные композиции без изменения геометрии карты.