Skip to main content

Speed limit

The Mapbox Navigation SDK allows you to present speed limit information in your application using a pre-built UI component.

Use the default speed limit UI component

The default speed limit UI component, MapboxSpeedInfoView, displays the speed limit of the road the user is traveling on.

EXAMPLE
Render speed limit for a route

Render the speed limit of the current road using the Speed Limit API and MapboxSpeedLimitView.

Add the view to the layout

Start by adding the MapboxSpeedInfoView to your activity or fragment layout. The sample code below positions the speed limit UI component on top of a map.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.mapbox.maps.MapView
android:id="@+id/mapView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>

<com.mapbox.navigation.ui.components.speedlimit.view.MapboxSpeedInfoView
android:id="@+id/speedLimitView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/mapbox_dimen_8dp"
android:layout_marginBottom="@dimen/mapbox_dimen_8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Create an instance of the Speed Limit API

The Speed Limit API formats speed limit data to be used in the speed limit UI component.

Create an instance of MapboxSpeedInfoApi.

// Define distance formatter options
private val distanceFormatterOptions: DistanceFormatterOptions by lazy {
DistanceFormatterOptions.Builder(context).build()
}

// Create an instance of the Speed Info API
private val speedInfoApi: MapboxSpeedInfoApi by lazy {
MapboxSpeedInfoApi()
}

Start receiving map matching events

The updates for the speed limit component are powered by the LocationObserver. Create an observer in your activity or fragment and register it with MapboxNavigation. Be sure to unregister the LocationObserver in either onStop or onDestroy to avoid leaking resources.

private val locationObserver = object : LocationObserver {

override fun onNewRawLocation(rawLocation: Location) {
...
}

override fun onNewLocationMatcherResult(
locationMatcherResult: LocationMatcherResult
) {
val value = speedInfoApi.updatePostedAndCurrentSpeed(
locationMatcherResult.speedLimit,
distanceFormatterOptions,
)
speedInfoView.render(value)
}
}
Speed limit data availability
Mapbox doesn't have speed limit data for every road. When the data is not available for a given road the value returned by the MapboxSpeedInfoApi will be null.
Was this page helpful?