Индикатор масштаба представляет собой интерфейсный элемент, отображающий соотношение расстояния на экране к реальному расстоянию на местности. В экосистеме картографических сервисов HERE Technologies он используется как стандартный компонент для повышения интерпретируемости пространственных данных.
Основная задача масштабной линейки — синхронизация визуального масштаба карты с текущим уровнем zoom. При изменении масштаба карты индикатор автоматически пересчитывает длину отрезка и обновляет подпись в метрических или имперских единицах.
В JavaScript API индикатор масштаба реализован как UI-компонент,
входящий в подсистему H.ui. Он интегрируется с объектом
карты и реагирует на события изменения масштаба, центра и проекции.
Ключевые элементы архитектуры:
ScaleBar не работает автономно; он подписывается на изменения состояния карты и обновляет своё состояние синхронно с render loop.
Добавление индикатора масштаба выполняется после создания карты и UI-слоя.
// Инициализация платформы
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
// Получение базовых слоёв
const defaultLayers = platform.createDefaultLayers();
// Создание карты
const map = new H.Map(
document.getElementById('map'),
defaultLayers.vector.normal.map,
{
center: { lat: 48.8566, lng: 2.3522 },
zoom: 10,
pixelRatio: window.devicePixelRatio || 1
}
);
// Добавление поведения (pan/zoom)
const beh * avior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
// Создание UI
const ui = H.ui.UI.createDefault(map, defaultLayers);
// Добавление индикатора масштаба
const scaleBar = ui.addControl('scalebar');
В данном случае строка ui.addControl('scalebar')
подключает стандартную реализацию индикатора масштаба, встроенную в
UI-фреймворк.
ScaleBar использует преобразование координат карты в экранные пиксели. При каждом изменении zoom вычисляется масштабный коэффициент:
Фактически применяется обратная зависимость:
ScaleBar получает данные напрямую из состояния H.Map,
без необходимости ручного обновления.
Индикатор масштаба является UI-элементом с фиксированным позиционированием относительно контейнера карты.
Типовые варианты размещения:
Пример изменения позиции через конфигурацию UI:
const ui = H.ui.UI.createDefault(map, defaultLayers, 'ru-RU');
const scaleBar = new H.ui.ScaleBar({
alignment: H.ui.LayoutAlignment.BOTTOM_RIGHT
});
ui.addControl('scalebar', scaleBar);
ScaleBar поддерживает динамическое переключение единиц измерения:
Выбор системы измерений может зависеть от:
При использовании локализации UI автоматически адаптирует подписи, включая формат чисел и единицы измерения.
Масштаб в HERE Maps API не является линейной величиной. Он зависит от:
ScaleBar учитывает эти параметры и пересчитывает отображаемое расстояние в реальном времени. На высоких широтах одна и та же длина на экране соответствует меньшему расстоянию на местности, что особенно важно для корректного отображения в северных регионах.
Возможна адаптация визуального стиля индикатора масштаба под дизайн интерфейса.
Основные параметры кастомизации:
Пример CSS-ориентированной настройки:
.h-ui-scalebar {
background-color: rgba(0, 0, 0, 0.6);
color: #ffffff;
border-radius: 4px;
padding: 6px 10px;
font-family: Arial, sans-serif;
font-size: 12px;
}
ScaleBar может использовать события карты для синхронизации:
mapviewchange — изменение центра или zoomresize — изменение размеров контейнераbaselayerchange — смена слоя картыПри каждом событии компонент пересчитывает масштаб без дополнительного вмешательства разработчика.
При изменении размеров DOM-элемента карты происходит перерасчёт пиксельной плотности отображения. ScaleBar автоматически адаптируется к новым условиям:
Это особенно важно при использовании адаптивных интерфейсов и мобильных устройств.
В HERE Maps API масштабная линейка не зависит от типа слоя напрямую, однако визуальная точность восприятия может различаться:
ScaleBar всегда опирается на математическую модель карты, а не на визуальное представление тайлов.
Существуют особенности, которые следует учитывать:
Несмотря на это, ScaleBar остаётся синхронизированным с геометрической моделью карты и обеспечивает корректное отображение расстояний в большинстве сценариев использования.