Архитектура пользовательского интерфейса в HERE Maps API JavaScript
построена вокруг модуля H.ui, который предоставляет набор
готовых контролов для взаимодействия с картой. Эти элементы
интегрируются в контейнер карты и управляются через экземпляр
H.ui.UI, связанный с объектом H.Map.
Контролы в системе делятся на стандартные (встроенные), расширяемые и кастомные. Стандартные обеспечивают базовую навигацию, управление отображением слоёв и вспомогательные функции интерфейса.
Перед использованием любых контролов необходимо создать экземпляр UI:
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
const defaultLayers = platform.createDefaultLayers();
const map = new H.Map(
document.getElementById('mapContainer'),
defaultLayers.vector.normal.map,
{
zoom: 10,
center: { lat: 52.5, lng: 13.4 }
}
);
const ui = H.ui.UI.createDefault(map, defaultLayers);
Метод H.ui.UI.createDefault автоматически добавляет
набор стандартных контролов, включая масштабирование, настройки
отображения и элементы навигации.
Zoom Control отвечает за изменение уровня масштабирования карты. Он обычно представлен кнопками «+» и «−».
H.ui.ZoomControlmap.getZoom() и
map.setZoom()const zoomControl = new H.ui.ZoomControl();
ui.addControl('zoomControl', zoomControl);
Контрол настроек карты предоставляет доступ к переключению базовых слоёв и режимов отображения.
const mapSettingsControl = new H.ui.MapSettingsControl({
baseLayers: ui.getBaseLayerEntries(),
layers: ui.getLayerEntries()
});
ui.addControl('mapsettings', mapSettingsControl);
Scalebar отображает реальное расстояние на карте в зависимости от текущего масштаба.
const scalebar = new H.ui.ScaleBar();
ui.addControl('scalebar', scalebar);
Overview Map представляет собой миниатюрную карту, показывающую текущее положение основного viewport.
const overview = new H.ui.OverviewMap({
position: H.ui.LayoutAlignment.BOTTOM_RIGHT,
size: { w: 150, h: 150 }
});
ui.addControl('overview', overview);
H.MapКонтрол полноэкранного режима управляет переходом карты в fullscreen.
const fullscreenControl = new H.ui.FullscreenControl();
ui.addControl('fullscreen', fullscreenControl);
Контрол атрибуции отображает обязательные юридические данные и источники картографических данных.
const attributionControl = new H.ui.AttributionControl({
branding: true
});
ui.addControl('attribution', attributionControl);
Все контролы управляются через объект H.ui.UI, который
предоставляет методы добавления и удаления:
ui.addControl('zoomControl', zoomControl);
ui.removeControl('zoomControl');
Контролы могут быть позиционированы через
H.ui.LayoutAlignment:
ui.addControl('zoomControl', zoomControl, H.ui.LayoutAlignment.RIGHT_TOP);
Контролы размещаются в фиксированных зонах интерфейса:
Пример:
ui.addControl(
'scalebar',
scalebar,
H.ui.LayoutAlignment.LEFT_BOTTOM
);
Компоновка автоматически адаптируется под размеры контейнера карты и мобильные устройства.
Контролы взаимодействуют с картой через события:
statechange — изменение состояния UIzoomchange — изменение масштабаbaselayerchange — смена базового слояПример подписки:
map.addEventListener('zoomchange', function (evt) {
console.log('Zoom:', evt.newValue);
});
Хотя стандартные контролы предоставляют готовый функционал, их внешний вид и поведение можно модифицировать.
.hui-zoomcontrol {
background-color: rgba(0,0,0,0.5);
}
Можно наследоваться от базовых классов UI:
class CustomZoomControl extends H.ui.ZoomControl {
constructor() {
super();
}
// переопределение поведения возможно через события DOM
}
При создании UI можно отключить автоматическое добавление контролов:
const ui = H.ui.UI.createDefault(map, defaultLayers, {
zoomControl: false,
scalebar: false
});
Это позволяет собрать полностью кастомный интерфейс.
Стандартные контролы адаптируются под touch-интерфейсы:
Zoom Control поддерживает жесты pinch-to-zoom, даже если кнопки скрыты.
Контролы напрямую взаимодействуют с объектом H.Map:
map.setZoom()map.setBaseLayer()map.getViewModel()Связь реализована через внутреннюю модель состояния
ViewModel, обеспечивающую согласованность всех компонентов
интерфейса.