Позиционирование внутри помещений

Позиционирование внутри помещений в экосистеме HERE Technologies реализуется как расширение стандартного геопозиционирования, ориентированное на сценарии, где GPS-сигнал недоступен или нестабилен. В веб-экосистеме HERE Maps API поддержка indoor-навигации строится вокруг концепции многоуровневых карт зданий, привязки к планам этажей и интеграции внешних источников сигналов (BLE, Wi-Fi, сенсорные данные устройства).

Система позиционирования внутри помещений опирается на несколько уровней данных, которые совместно формируют координату пользователя в пространстве здания.

На базовом уровне используется модель «venue map» — цифровое представление здания, включающее:

  • геометрию помещений;
  • этажность (levels);
  • точки интереса (POI);
  • внутренние маршруты (corridors, stairs, elevators).

Поверх геометрической модели накладывается слой позиционирования, который может включать:

  • BLE-маяки (beacons);
  • Wi-Fi fingerprinting;
  • инерциальные датчики (акселерометр, гироскоп);
  • гибридные модели коррекции.

Ключевой особенностью является переход от классических координат WGS84 к локальной системе координат здания, где каждая точка имеет привязку к этажу и внутренней сетке.

Подключение Indoor-карт в JavaScript API

В 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, который объединяет данные датчиков и внешних источников.

Основные режимы:

  • BLE-based positioning;
  • Wi-Fi-based positioning;
  • hybrid sensor fusion.

Пример подключения позиции:

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-маяки и калибровка пространства

BLE-маяки используются для триангуляции положения внутри здания. Каждый маяк передаёт:

  • UUID;
  • RSSI (уровень сигнала);
  • идентификатор зоны.

Алгоритм позиционирования основан на сравнении текущих RSSI-значений с заранее собранной картой сигнатур (fingerprint database).

При калибровке создаётся сетка измерений:

  • фиксируются точки на плане;
  • записываются значения сигналов;
  • строится модель вероятностного распределения.

В дальнейшем позиция вычисляется как:

  • ближайшее соответствие сигнатуры;
  • либо вероятностная оценка (KNN, Bayesian filtering).

Wi-Fi fingerprinting

Wi-Fi позиционирование используется как резервный или основной метод в зданиях с плотной сетью точек доступа.

Каждая точка доступа рассматривается как источник сигнала с уникальными характеристиками:

  • MAC-адрес;
  • RSSI;
  • стабильность сигнала.

Система формирует многомерный вектор:

V = [RSSI_1, RSSI_2, ..., RSSI_n]

и сопоставляет его с базой заранее измеренных векторов.

Взаимодействие indoor-карт и маршрутизации

Indoor-навигация расширяет стандартный routing API, добавляя:

  • переход между этажами;
  • учет лифтов и лестниц;
  • ограниченные зоны доступа;
  • маршруты внутри POI (например, торговых центров).

Пример построения маршрута:

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 filter;
  • moving average smoothing;
  • particle filtering.

Kalman-модель позволяет сглаживать резкие скачки координат, характерные для BLE и Wi-Fi измерений.

Общая схема обновления позиции:

  1. получение сырых данных датчиков;
  2. нормализация RSSI;
  3. вычисление предварительной координаты;
  4. фильтрация;
  5. обновление UI карты.

Ограничения и особенности indoor-среды

Indoor-позиционирование сталкивается с рядом системных ограничений:

  • затухание сигнала в бетонных конструкциях;
  • мультипути (multipath propagation);
  • временная нестабильность Wi-Fi сетей;
  • необходимость предварительной калибровки зданий.

В условиях торговых центров и аэропортов точность обычно выше за счёт плотной инфраструктуры сигналов, тогда как в складских помещениях требуется дополнительная установка маяков.

Интеграция с пользовательским интерфейсом

Indoor-карты часто требуют отдельного UI-слоя:

  • выбор этажей через контроллер;
  • подсветка текущей зоны;
  • отображение маршрута внутри здания;
  • динамическая фильтрация POI.

Пример переключателя этажей:

const floorControl = new H.ui.FloorControl(venue);
ui.addControl('floors', floorControl);

UI-компоненты синхронизируются с состоянием venue-модели и автоматически обновляют отображение при смене уровня.

Гибридные сценарии outdoor → indoor

Переход между уличной и внутренней навигацией реализуется через автоматическое переключение контекста:

  • GPS активен на улице;
  • при входе в здание активируется indoor engine;
  • при выходе происходит возврат к GPS.

Определение границы выполняется через:

  • геофенсинг;
  • анализ потери GPS-сигнала;
  • распознавание Wi-Fi/BLE окружения.

Такой переход позволяет сохранить непрерывность маршрута без ручного вмешательства пользователя.