PositioningSDK - Getting started
Installation
Before starting to develop your application with the WemapSDKs, you'll need to configure your credentials and add the SDK as a dependency.
Add the dependency
Add the WemapSDKs to your app
The code examples below show how to configure the WemapPositioningSDK to work with the WemapMapSDK, but it can be used independently of the WemapMapSDK.
In your module level Gradle file (usually
project/module/build.gradle.ktsorproject/module/build.gradle), add the dependency for the WemapSDK library for Android.dependencies {
// Add the dependency for the WemapMapSDK library
implementation "com.getwemap.sdk:map:<version>"
// Add the dependency for the WemapPositioningSDK library
implementation "com.getwemap.sdk.positioning:fused-gms:<version>" // Google's Fused Location Source
implementation "com.getwemap.sdk.positioning:polestar:<version>" // Polestar Location Source
implementation "com.getwemap.sdk.positioning:wemap-vps-arcore:<version>" // Wemap VPS ARCore Location Source
}Make sure that your project's
minSdkVersionis at API 21 or higher.android {
...
defaultConfig {
minSdkVersion 21
}
}Because you've edited your Gradle files, Android Studio will ask you whether you want to sync the Gradle files. You can sync now.
Location Sources
Wemap provides a set of different location sources to manage the user's location on the map. By default, WemapMapSDK uses Android GPS and Network Providers to obtain raw location updates.
To set a specific location source, you need to add a specific WemapPositioningSDK library to your project dependencies and assign it to the map.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
mapView.getWemapMapAsync { _, _, _ ->
... // check permissions
setupLocationSource()
}
}
If you want the camera to follow the user's direction, you can do this by changing renderMode and cameraMode of locationComponent as shown below
mapView.map.locationComponent.apply {
cameraMode = CameraMode.TRACKING_COMPASS
renderMode = RenderMode.COMPASS
}
Google's Fused location source
fun setupLocationSource() {
mapView.locationManager.apply {
source = GmsFusedLocationSource(applicationContext)
isEnabled = true
}
}
Polestar location source
fun setupLocationSource() {
mapView.locationManager.apply {
source = PolestarLocationSource(applicationContext, "emulator") // change 'emulator' to your polestar API key here
isEnabled = true
}
}
Wemap VPS ARCore location source
To make VPS service work, you need to know VPS service endpoint. For additional information contact Wemap team.
fun setupLocationSource() {
val vpsLocationSource = WemapVPSARCoreLocationSource(applicationContext, "https://your-wemap-vps-endpoint")
vpsLocationSource.listeners.add(vpsListener)
mapView.locationManager.apply {
source = vpsLocationSource
isEnabled = true
}
}
You will also need to react to changes in the state of WemapVPSARCoreLocationSource due to the need to allow the user to scan their environment.
private val vpsListener by lazy {
object : WemapVPSARCoreLocationSourceListener {
override fun onScanStatusChanged(status: WemapVPSARCoreLocationSource.ScanStatus) {
...
}
override fun onStateChanged(state: WemapVPSARCoreLocationSource.State) {
when(state) {
State.SCAN_REQUIRED, State.LIMITED_CORRECTION -> {
// ask user to scan his environment and show camera
}
}
}
override fun onError(error: WemapVPSARCoreLocationSourceError) {
...
}
}
}
Examples
You can find additional examples for the WemapSDKs on GitHub. Clone the repository and run the example application following the instructions in the README.