В HERE Maps вращение карты реализуется через параметр heading, который определяет угол поворота относительно северного направления. Значение задаётся в градусах:
0 — север сверху90 — восток сверху180 — юг сверху270 — запад сверхуОсь вращения проходит перпендикулярно плоскости карты, а сама ротация не влияет на координаты объектов, изменяя только их визуальную ориентацию.
В контексте API объект H.Map использует модель
представления (view model), где heading является частью
состояния камеры наряду с масштабом и наклоном.
Базовая конфигурация карты создаётся через платформу и слой тайлов:
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
const layers = platform.createDefaultLayers();
const map = new H.Map(
document.getElementById('map'),
layers.vector.normal.map,
{
center: { lat: 52.5200, lng: 13.4050 },
zoom: 12,
pixelRatio: window.devicePixelRatio || 1
}
);
const beh * avior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
const ui = H.ui.UI.createDefault(map, layers);
По умолчанию вращение может быть доступно через жесты, если
активирован Behavior.
Основной способ управления ротацией — изменение heading у объекта view model:
map.getViewModel().setLookAtData({
heading: 45
});
Изменение происходит плавно, с анимацией по умолчанию.
Для мгновенного поворота используется параметр анимации:
map.getViewModel().setLookAtData(
{
heading: 90
},
true
);
Ротация может быть анимирована с заданной длительностью и easing:
map.getViewModel().setLookAtData(
{
heading: 180
},
{
duration: 800
}
);
При изменении heading в сочетании с zoom или center формируется комплексная камера:
map.getViewModel().setLookAtData({
center: { lat: 48.8566, lng: 2.3522 },
zoom: 14,
heading: 120
});
Текущее значение ориентации карты извлекается из состояния view model:
const state = map.getViewModel().getLookAtData();
const currentHeading = state.heading;
Это значение удобно использовать для синхронизации интерфейсов и внешних индикаторов направления.
При подключении H.mapevents.Behavior включается
поддержка жестов, включая вращение двумя пальцами:
const beh * avior = new H.mapevents.Behavior(
new H.mapevents.MapEvents(map)
);
В этом режиме изменение heading происходит автоматически при взаимодействии пользователя.
В некоторых сценариях требуется запретить ротацию, фиксируя ориентацию карты на север.
Отключение вращения достигается через параметры поведения:
behavior.disable(H.mapevents.Behavior.Feature.ROTATE);
Также возможно программное «сбросное» закрепление:
map.getViewModel().setLookAtData({
heading: 0
});
Часто используется функциональность возврата карты в стандартное положение:
function resetRotation() {
map.getViewModel().setLookAtData({
heading: 0
}, {
duration: 500
});
}
Такой подход применяется для UI-кнопок «Север вверх» или автоматической переориентации после навигации.
В HERE Maps rotation часто используется совместно с наклоном камеры.
Наклон задаётся через tilt:
map.getViewModel().setLookAtData({
heading: 135,
tilt: 60,
zoom: 16
});
Сочетание tilt и heading формирует трёхмерное восприятие сцены, особенно в режимах навигации.
Ротация может выполняться анимационно через изменение heading во времени:
let angle = 0;
setInterval(() => {
angle = (angle + 5) % 360;
map.getViewModel().setLookAtData({
heading: angle
});
}, 100);
Такой подход используется для демонстрационных режимов или визуализации маршрутов.
Для ограничения диапазона углов применяется логика нормализации:
function normalizeHeading(value) {
return ((value % 360) + 360) % 360;
}
Это предотвращает накопление отрицательных значений и выход за диапазон.
Встроенный UI HERE Maps может содержать элементы управления ориентацией. При создании интерфейса:
const ui = H.ui.UI.createDefault(map, layers);
доступны контролы, позволяющие визуально управлять вращением карты.
Дополнительно возможно создание собственного контроллера:
const btn = document.createElement('button');
btn.innerText = 'Rotate 90°';
btn.oncl ick = () => {
const state = map.getViewModel().getLookAtData();
map.getViewModel().setLookAtData({
heading: state.heading + 90
});
};
document.body.appendChild(btn);
При навигационных сценариях heading часто синхронизируется с направлением движения:
map.getViewModel().setLookAtData({
center: currentPosition,
heading: courseAngle
});
courseAngle обычно вычисляется на основе GPS-данных или
сегмента маршрута, что позволяет карте «смотреть» вперёд по направлению
движения.
В некоторых конфигурациях устройства или браузера поддержка ротации
жестами может быть ограничена. В таких случаях вращение остаётся
доступным только программно через API setLookAtData.
Фиксация поведения:
const beh * avior = new H.mapevents.Behavior(
new H.mapevents.MapEvents(map),
{
rotateSpeed: 0
}
);
Полный контроль состояния карты включает три параметра:
map.getViewModel().setLookAtData({
center: { lat: 51.5074, lng: -0.1278 },
zoom: 13,
heading: 225
}, {
duration: 1000
});
Такое управление позволяет формировать сложные сценарии навигации, включая автоматические переходы между точками с изменением ориентации.