Skip to main content
Version: 1.x (beta)

Location Indicator

Show and style the device's current location on the map.

Overview​

Enabling the user location indicator renders a view on the map showing the device's current location. This is a WemapMapSDK feature.

Enable the default indicator by setting a user tracking mode:

mapView.userTrackingMode = .follow // or .followWithHeading

Customizing the appearance​

Customize the indicator through mapView.userLocationManager.userLocationViewStyles:

mapView.userLocationManager.userLocationViewStyles = .init(
normal: .init(
foregroundColor: .green,
backgroundColor: .white,
headingColor: .red
),
stale: .init(
foregroundColor: .brown,
backgroundColor: .white,
headingColor: .cyan
),
outOfActiveLevelOpacity: 0.4,
accuracyColor: .green,
accuracyAlpha: 0.2,
isPulseEnabled: true,
pulseColor: .magenta,
pulseAlpha: 0.3
)

The normal and stale styles are UserLocationViewStateStyle values — stale is used when location updates go quiet (see staleStateTimeout).

Which of the two is in force is locationState, and locationStates reports every change to it. Follow them when your own UI repeats the user's position — a floor indicator, a recentre button — so that it greys with the puck instead of claiming a position the map no longer trusts. The stream does not replay, so seed from the property first:

var isStale = mapView.userLocationManager.locationState.isStale

for await state in mapView.userLocationManager.locationStates {
isStale = state.isStale
}