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.
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
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.