Skip to main content

VPS Location Source

The VPS (Visual Positioning System) Location Source provides highly accurate indoor positioning using camera input. It's especially useful in environments where GPS signals are weak or unavailable.

info

Wemap VPS must be configured by the Wemap team. Please contact us if you are interested in using it.

Setup Steps

Step 1: Initialize Core SDK

The Core SDK must be initialized before creating the VPS location source.

import { core } from '@wemap/core';

await core.init({
emmid: 'your-map-id',
token: 'your-token',
});

Step 2: Initialize VPSLocationSource and Start It

import { VPSLocationSource } from '@wemap/positioning';

const vpsLocationSource = new VPSLocationSource({
// Configuration options
});

await vpsLocationSource.start();

Check out the API reference for VPSLocationSource →

Step 3: Listen to Position Updates

vpsLocationSource.onUpdate((pose) => {
console.log('Position:', pose.position);
console.log('Orientation:', pose.attitude.headingDegrees);
});

Step 3: Setup the Camera and start scan

info

You can trigger a scan at any time to improve localization accuracy. It is recommended to re-scan the environment after a significant period of time has passed or when the user has moved for a significant distance. We recommend to trigger a scan every 200 meters.

import { Camera, requestCameraPermissions } from '@wemap/camera';
import { requestSensorPermissions } from '@wemap/positioning';

const hasCameraPermission = await requestCameraPermissions();
if (!hasCameraPermission) {
throw new Error('Camera permission denied');
}

const cameraContainer = document.getElementById('camera-container');
const camera = new Camera(cameraContainer, {
width: 640,
height: 480,
resizeOnWindowChange: true,
});

await camera.start();

// Request permissions (required on iOS)
const hasPermission = await requestSensorPermissions();
if (!hasPermission) {
throw new Error('Permission denied');
}

const scanSuccess = await vpsLocationSource.startScan();

if (scanSuccess) {
console.log('VPS scan successful! Position found.');
// You can now stop the camera if desired
await camera.stop();
camera.release();
}

Link to useful API Reference:

Permissions

VPS requires camera and device orientation permissions.

Camera Permissions

import { requestCameraPermissions } from '@wemap/camera';

const hasPermission = await requestCameraPermissions();
if (!hasPermission) {
throw new Error('Camera permission denied');
}

Device Orientation Permissions (iOS)

On iOS, you need to request device orientation permission. This request needs to be triggered after a user interaction (click, tap, etc.).

import { requestSensorPermissions } from '@wemap/positioning';

const hasPermission = await requestSensorPermissions();
if (!hasPermission) {
throw new Error('Sensor permission denied');
}

Map Matching with VPS

VPS location source supports map matching just like other location sources. See the main positioning guide for details on how to set up map matching.