Стартовая точка любого веб-приложения с картографическим функционалом на базе HERE Maps API — корректно сформированная HTML-структура. Именно она определяет, где будет отображаться карта, как подключаются внешние библиотеки и каким образом инициализируется логика приложения.
Минимальный HTML-документ должен включать три ключевых элемента:
Основой служит стандартная HTML-разметка, в которую интегрируется карта:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HERE Map Application</title>
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
<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>
<script src="app.js"></script>
</body>
</html>
Элемент <div id="map"></div> является точкой
монтирования карты. Вся визуализация происходит внутри него.
Ключевые требования к контейнеру:
id, используемого в
JavaScript;Частая ошибка — отсутствие высоты у родительских элементов. В этом случае карта не появляется, несмотря на корректную инициализацию API.
Для корректного отображения карты необходимо обеспечить растяжение контейнера на весь экран или заданную область.
html, body {
height: 100%;
margin: 0;
}
#map {
width: 100%;
height: 100%;
}
В более сложных интерфейсах контейнер часто размещается внутри layout-сетки:
.layout {
display: flex;
height: 100vh;
}
.sidebar {
width: 300px;
}
.map-container {
flex: 1;
}
<div class="layout">
<div class="sidebar"></div>
<div id="map" class="map-container"></div>
</div>
Архитектура HERE Maps API основана на модульной загрузке скриптов. Каждый модуль отвечает за отдельный функциональный слой:
mapsjs-core.js — базовая логика и объекты карты;mapsjs-service.js — доступ к REST-сервисам (геокодинг,
маршруты);mapsjs-ui.js — элементы управления интерфейсом;mapsjs-mapevents.js — обработка событий мыши и
сенсоров.Порядок подключения критически важен: сначала ядро, затем сервисы и 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: 52.5200, lng: 13.4050 },
zoom: 10,
pixelRatio: window.devicePixelRatio || 1
}
);
Для обработки пользовательских событий подключается модуль событий:
const beh * avior = new H.mapevents.Behavior(
new H.mapevents.MapEvents(map)
);
Добавляется UI:
const ui = H.ui.UI.createDefault(map, defaultLayers);
Эти два компонента обеспечивают:
Карта управляется через методы объекта map:
map.setCenter({ lat: 48.8566, lng: 2.3522 });
map.setZoom(12);
Изменение состояния карты выполняется синхронно, что позволяет строить динамические интерфейсы на основе пользовательских действий.
При изменении размеров окна необходимо уведомлять карту:
window.addEventListener('resize', () => {
map.getViewPort().resize();
});
Без этого карта может некорректно пересчитывать координаты и отображение тайлов.
Типичная структура проекта с использованием HERE Maps API:
project/
│
├── index.html
├── styles.css
├── app.js
└── assets/
Вынесение логики в отдельный файл app.js
обеспечивает:
В app.js обычно выделяется функция инициализации:
function initMap() {
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: 40.7128, lng: -74.0060 },
zoom: 11
}
);
const events = new H.mapevents.MapEvents(map);
new H.mapevents.Behavior(events);
H.ui.UI.createDefault(map, layers);
}
window.onl oad = initMap;
Загрузка скриптов через CDN предполагает:
Для производственных проектов часто применяются:
Корректная архитектура HTML-приложения с картой строится на нескольких принципах: