Позиционирование внутри помещений в экосистеме HERE Technologies реализуется как расширение стандартного геопозиционирования, ориентированное на сценарии, где GPS-сигнал недоступен или нестабилен. В веб-экосистеме HERE Maps API поддержка indoor-навигации строится вокруг концепции многоуровневых карт зданий, привязки к планам этажей и интеграции внешних источников сигналов (BLE, Wi-Fi, сенсорные данные устройства).
Система позиционирования внутри помещений опирается на несколько уровней данных, которые совместно формируют координату пользователя в пространстве здания.
На базовом уровне используется модель «venue map» — цифровое представление здания, включающее:
Поверх геометрической модели накладывается слой позиционирования, который может включать:
Ключевой особенностью является переход от классических координат WGS84 к локальной системе координат здания, где каждая точка имеет привязку к этажу и внутренней сетке.
В JavaScript API HERE карты зданий подключаются через специализированные слои venue. Базовая инициализация карты выглядит следующим образом:
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,
{
zoom: 18,
center: { lat: 52.530, lng: 13.384 }
}
);
Для включения поддержки indoor-слоя используется Venue Service:
const service = platform.getVenueService();
const provider = new H.venue.Provider({
service: service,
space: map.getSpace()
});
const venuesLayer = new H.map.layer.TileLayer(provider);
map.addLayer(venuesLayer);
После подключения слоя становится доступной визуализация зданий с возможностью переключения этажей и отображения внутренних объектов.
Каждое здание в системе представляется как набор уровней (floors). Уровни описываются метаданными:
При выборе здания API загружает структуру venue и формирует дерево уровней:
provider.addEventListener('tap', (evt) => {
const venue = evt.target;
venue.setActive(true);
const levels = venue.getLevels();
console.log(levels);
});
Переключение этажей происходит без перезагрузки карты, изменяется только активный слой визуализации.
Indoor-позиционирование реализуется через объект
Positioning, который объединяет данные датчиков и внешних
источников.
Основные режимы:
Пример подключения позиции:
const positioning = new H.pos.Positioning({
platform: platform,
type: 'hybrid'
});
positioning.start();
positioning.addEventListener('positionupdate', (evt) => {
const coord = evt.data.position;
map.setCenter({
lat: coord.lat,
lng: coord.lng
});
console.log('Floor:', coord.level);
});
Каждое обновление позиции может содержать дополнительное поле
level, указывающее текущий этаж.
BLE-маяки используются для триангуляции положения внутри здания. Каждый маяк передаёт:
Алгоритм позиционирования основан на сравнении текущих RSSI-значений с заранее собранной картой сигнатур (fingerprint database).
При калибровке создаётся сетка измерений:
В дальнейшем позиция вычисляется как:
Wi-Fi позиционирование используется как резервный или основной метод в зданиях с плотной сетью точек доступа.
Каждая точка доступа рассматривается как источник сигнала с уникальными характеристиками:
Система формирует многомерный вектор:
V = [RSSI_1, RSSI_2, ..., RSSI_n]
и сопоставляет его с базой заранее измеренных векторов.
Indoor-навигация расширяет стандартный routing API, добавляя:
Пример построения маршрута:
const router = platform.getRoutingService(null, 8);
const params = {
origin: 'floor:1,lat:52.530,lng:13.384',
destination: 'floor:3,lat:52.531,lng:13.389',
mode: 'pedestrian'
};
router.calculateRoute(params, result => {
console.log(result);
}, error => {
console.error(error);
});
Маршрут может включать сегменты:
Indoor API использует событийную модель, позволяющую отслеживать изменения состояния здания и пользователя:
venuechange — смена здания;floorchange — смена уровня;positionupdate — обновление координат;orientationchange — изменение направления
движения.Пример обработки:
map.addEventListener('floorchange', (e) => {
console.log('Current floor:', e.level);
});
Сигналы внутри помещений подвержены значительным искажениям. Для повышения точности используются фильтры:
Kalman-модель позволяет сглаживать резкие скачки координат, характерные для BLE и Wi-Fi измерений.
Общая схема обновления позиции:
Indoor-позиционирование сталкивается с рядом системных ограничений:
В условиях торговых центров и аэропортов точность обычно выше за счёт плотной инфраструктуры сигналов, тогда как в складских помещениях требуется дополнительная установка маяков.
Indoor-карты часто требуют отдельного UI-слоя:
Пример переключателя этажей:
const floorControl = new H.ui.FloorControl(venue);
ui.addControl('floors', floorControl);
UI-компоненты синхронизируются с состоянием venue-модели и автоматически обновляют отображение при смене уровня.
Переход между уличной и внутренней навигацией реализуется через автоматическое переключение контекста:
Определение границы выполняется через:
Такой переход позволяет сохранить непрерывность маршрута без ручного вмешательства пользователя.