Подключение и инициализация HERE Maps API в JavaScript начинается с загрузки SDK и создания базовой структуры карты, включающей платформу, слой отображения и объект карты, привязанный к DOM-контейнеру.
Для работы с картой требуется подключение JavaScript-бандла платформы HERE Technologies. Обычно используется CDN-скрипт, предоставляемый официальной платформой.
<link rel="stylesheet" type="text/css"
href="https://js.api.here.com/v3/3.1/mapsjs-ui.css" />
<script src="https://js.api.here.com/v3/3.1/mapsjs-core.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-service.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-ui.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-mapevents.js"></script>
Подключение разделено на несколько модулей:
mapsjs-core — базовые классы и инфраструктураmapsjs-service — доступ к REST-сервисам платформыmapsjs-ui — интерфейсные элементы управленияmapsjs-mapevents — обработка событий карты (drag, zoom,
tap)Инициализация начинается с создания платформы, которая выступает точкой входа ко всем сервисам HERE.
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
Ключевые особенности:
apikey является обязательным параметромPlatform инкапсулирует доступ к тайлам,
геокодированию и маршрутизацииПосле создания платформы требуется получить стандартные слои отображения.
const defaultLayers = platform.createDefaultLayers();
Объект defaultLayers содержит набор предопределённых
визуальных стилей:
Наиболее часто используется слой vector.normal.map.
Перед созданием карты необходим HTML-элемент, в котором будет отрисован canvas или SVG-контейнер.
<div id="mapContainer" style="width: 100%; height: 500px;"></div>
Размер контейнера критически важен: без заданной высоты карта не будет отображаться корректно.
Основной объект карты создаётся через конструктор
H.Map.
const map = new H.Map(
document.getElementById('mapContainer'),
defaultLayers.vector.normal.map,
{
center: { lat: 51.505, lng: -0.09 },
zoom: 10,
pixelRatio: window.devicePixelRatio || 1
}
);
Параметры инициализации:
container — DOM-элементlayer — выбранный слой отображенияcenter — начальные координаты центра картыzoom — уровень масштабирования (обычно 1–20)pixelRatio — оптимизация под HiDPI-экраныДля интерактивности подключается поведенческий модуль.
const beh * avior = new H.mapevents.Behavior(
new H.mapevents.MapEvents(map)
);
Функциональные возможности:
Без этого слоя карта остаётся статичной.
Стандартные элементы управления добавляются через UI-фреймворк.
const ui = H.ui.UI.createDefault(map, defaultLayers);
Этот вызов автоматически добавляет:
UI можно дополнительно кастомизировать через конфигурацию, отключая или изменяя отдельные компоненты.
При изменении размеров окна карта должна пересчитывать viewport.
window.addEventListener('resize', () => {
map.getViewPort().resize();
});
Это предотвращает:
После создания карты параметры можно динамически изменять.
map.setCenter({ lat: 52.52, lng: 13.405 });
map.setZoom(12);
Также поддерживаются плавные переходы:
map.setZoom(14, true);
или комбинированное изменение вида:
map.setViewBounds(bounds);
HERE Maps использует WGS84 (широта/долгота) как базовую систему координат.
Основные правила:
lat — широта (−90 до 90)lng — долгота (−180 до 180){ lat, lng }Для внутренних вычислений SDK преобразует координаты в проекцию Web Mercator.
При создании карты учитываются параметры рендеринга:
const map = new H.Map(container, layer, {
center: { lat: 48.8566, lng: 2.3522 },
zoom: 11,
pixelRatio: Math.min(window.devicePixelRatio, 2)
});
Оптимизации:
pixelRatio снижает нагрузку на GPUНекоторые операции требуют ожидания инициализации сервиса.
platform.getService().then(service => {
console.log('Service ready');
});
Хотя в большинстве случаев карта создаётся синхронно, сервисный слой может загружаться асинхронно при первом обращении к API.
Карты поддерживают переключение между стилями:
const satelliteLayer = platform.createDefaultLayers().satellite.map;
map.setBaseLayer(satelliteLayer);
Основные типы слоёв:
При неверном ключе или отсутствии доступа карта не инициализируется корректно.
Типичные симптомы:
Рекомендуется отслеживать события:
map.addEventListener('mapviewchange', function () {
console.log('View changed');
});
Объединённая структура инициализации включает все ключевые шаги:
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,
{
center: { lat: 51.505, lng: -0.09 },
zoom: 10,
pixelRatio: window.devicePixelRatio || 1
}
);
const beh * avior = new H.mapevents.Behavior(
new H.mapevents.MapEvents(map)
);
const ui = H.ui.UI.createDefault(map, defaultLayers);
window.addEventListener('resize', () => {
map.getViewPort().resize();
});
Инициализация карты строится по трёхуровневой модели:
Такая структура обеспечивает независимость компонентов и позволяет расширять систему без изменения базовой логики отображения.