Indoor Maps в HERE Maps API for JavaScript представляют собой слой пространственных данных, позволяющий отображать внутренние пространства зданий с поддержкой этажности, помещений, объектов интереса и маршрутизации внутри помещений. Подсистема основана на данных платформы HERE Technologies и интегрируется с векторным рендерингом, системой слоёв и событийной моделью карты.
Внутренние карты в HERE реализуются как расширение стандартной картографической сцены. Базовая модель включает:
Indoor слой не является отдельной картой — он накладывается на стандартную карту, активируясь при достижении определённого уровня масштабирования и наличии данных о здании.
Ключевая особенность архитектуры заключается в разделении:
Переключение между ними происходит автоматически или через API-состояние venue.
Indoor Map в HERE базируется на концепции Venue Map — структурированного описания здания.
Основные сущности:
Каждый элемент имеет уникальный идентификатор и набор атрибутов:
Venue Map хранится в оптимизированном формате, который загружается частями по мере необходимости, что снижает нагрузку на клиент.
Indoor функциональность активируется через конфигурацию карты и подключение venue сервисов.
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,
{
zoom: 18,
center: { lat: 48.8589, lng: 2.3469 },
pixelRatio: window.devicePixelRatio
}
);
const beh * avior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
const ui = H.ui.UI.createDefault(map, layers);
Indoor слой начинает подгружаться автоматически при наличии данных Venue в текущем экстенте карты.
Многоуровневая структура реализуется через управление активным уровнем (active level). В каждом здании может быть несколько этажей, и только один или несколько отображаются одновременно.
Основные операции:
Пример логики переключения:
venueService.addEventListener('statechange', (event) => {
const venue = event.venue;
const levels = venue.getLevels();
const activeLevel = venue.getActiveLevel();
console.log('Active level:', activeLevel.getName());
});
При изменении масштаба карта может автоматически переключать уровень, если включён режим auto-level.
Indoor rendering использует векторные тайлы с дополнительным семантическим слоем.
Отображаемые элементы:
Каждый объект может иметь стилизацию в зависимости от категории. Стили задаются через тему карты (map theme) или через кастомные правила рендера.
Пример изменения визуализации POI:
map.addEventListener('tap', function (evt) {
const target = evt.target;
if (target instanceof H.map.Polygon) {
console.log('Room ID:', target.getData());
}
});
Indoor слой поддерживает полноценную событийную модель:
Объекты внутри здания являются интерактивными геометриями, которые могут содержать пользовательские данные.
Типичная схема взаимодействия:
Indoor Maps поддерживают семантический поиск по объектам внутри venue.
Возможности:
Алгоритм поиска учитывает:
Результаты возвращаются как набор indoor POI с координатами внутри здания.
Маршрутизация внутри зданий строится на графе соединений:
Маршрут может включать:
Сценарий маршрутизации:
Indoor routing интегрируется с внешним routing, формируя единый путь end-to-end.
Контроль отображения осуществляется через состояние venue и параметры слоя.
Основные режимы:
Дополнительно можно управлять:
Пример управления состоянием:
map.getLayers().forEach(layer => {
console.log(layer.getProvider());
});
Indoor Maps требуют оптимизации из-за высокой плотности объектов внутри зданий.
Основные стратегии:
Векторный рендеринг позволяет динамически упрощать сцены без потери логической структуры.
Стилизация выполняется через theme-based rendering.
Возможные уровни кастомизации:
Стили могут зависеть от:
Каждый indoor объект может генерировать события:
Пример обработки выбора объекта:
map.addEventListener('tap', (evt) => {
const object = evt.target;
if (object && object.getData) {
const data = object.getData();
console.log('Indoor object:', data);
}
});
Indoor Maps часто интегрируются с:
В таких сценариях indoor слой выступает визуальным интерфейсом для потоковых данных о пространстве.
Несмотря на развитую функциональность, модель имеет структурные ограничения:
Indoor слой эффективен в сценариях с высокой плотностью POI и сложной этажной структурой, таких как аэропорты, торговые центры и бизнес-комплексы.