Positioning API в экосистеме HERE Maps API представляет собой слой сервисов и инструментов, отвечающих за определение текущего местоположения устройства пользователя и преобразование его в координаты, пригодные для дальнейшего использования в картографических и навигационных задачах. В связке с веб-API браузера и собственными алгоритмами платформы HERE Technologies этот компонент обеспечивает многоуровневую систему геопозиционирования, включающую GPS, сетевые источники и гибридные модели определения координат.
Positioning API не является изолированным модулем, а выступает связующим звеном между аппаратными возможностями устройства и картографическим стеком HERE Maps. Его задача заключается в:
Ключевая особенность архитектуры заключается в том, что API не полагается исключительно на спутниковую навигацию, а использует гибридный подход, позволяющий работать даже в условиях слабого сигнала GPS (например, в городских каньонах или внутри зданий).
Наиболее точный источник координат. Использует спутниковые системы:
Погрешность в идеальных условиях составляет от 1 до 5 метров, однако в городских условиях может значительно увеличиваться.
Использует базы MAC-адресов точек доступа. Алгоритм сопоставляет окружающие сети Wi-Fi с глобальной базой данных и вычисляет приблизительное местоположение.
Преимущества:
Метод triangulation по базовым станциям LTE/5G/3G.
Особенности:
HERE Maps API комбинирует все доступные сигналы и применяет фильтрацию шумов, коррекцию дрейфа и вероятностные модели для получения наиболее стабильного результата.
В веб-окружении Positioning API чаще всего интегрируется через стандартный браузерный интерфейс:
navigator.geolocation.getCurrentPosition(
(position) => {
const lat = position.coords.latitude;
const lng = position.coords.longitude;
const accuracy = position.coords.accuracy;
console.log(lat, lng, accuracy);
},
(error) => {
console.error("Ошибка получения геопозиции:", error);
},
{
enableHighAccuracy: true,
timeout: 10000,
maximumAge: 0
}
);
Для навигационных сценариев используется метод наблюдения за изменением координат:
const watchId = navigator.geolocation.watchPosition(
(position) => {
updateMap(position.coords.latitude, position.coords.longitude);
},
(error) => {
console.error(error);
},
{
enableHighAccuracy: true
}
);
Остановка отслеживания:
navigator.geolocation.clearWatch(watchId);
Positioning API часто используется совместно с картографическим слоем:
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: 0, lng: 0 },
zoom: 2
}
);
После получения координат выполняется центрирование карты:
function updateMap(lat, lng) {
map.setCenter({ lat, lng });
map.setZoom(14);
}
Поле accuracy играет ключевую роль в обработке
координат. Оно определяет радиус неопределенности в метрах.
Пример фильтрации:
let lastPosition = null;
function isValidPosition(newPos) {
if (!lastPosition) return true;
const dx = newPos.coords.latitude - lastPosition.coords.latitude;
const dy = newPos.coords.longitude - lastPosition.coords.longitude;
return Math.sqrt(dx * dx + dy * dy) < 0.01;
}
Типовые ошибки:
Пользователь запретил доступ к геолокации.
Нет доступных источников координат.
Превышено время ожидания ответа.
Обработка:
function handleError(error) {
switch (error.code) {
case error.PERMISSION_DENIED:
console.log("Доступ запрещён");
break;
case error.POSITION_UNAVAILABLE:
console.log("Позиция недоступна");
break;
case error.TIMEOUT:
console.log("Тайм-аут получения позиции");
break;
}
}
Использование высокоточного режима
(enableHighAccuracy: true) увеличивает нагрузку на:
Рекомендуемые практики:
Positioning API строго контролируется браузером:
HERE Technologies в своей экосистеме дополнительно применяет:
Построение маршрутов и ведение пользователя по карте в реальном времени.
Отслеживание курьеров, транспорта и грузов.
Анализ перемещений пользователей и плотности активности.
Привязка цифровых объектов к реальному миру.
В городских условиях и помещениях используется fallback-логика:
Такая стратегия позволяет сохранять непрерывность трекинга даже при потере спутникового сигнала.
Positioning API тесно связан с рендерингом карты:
map.addEventListener("mapviewchange", () => {
console.log("Карта изменена пользователем");
});
Для снижения нагрузки применяется:
Пример простого throttle:
let lastUpdate = 0;
function shouldUpdate() {
const now = Date.now();
if (now - lastUpdate > 1000) {
lastUpdate = now;
return true;
}
return false;
}