Map display control
Map display control
The MapDisplayManager provides control over the map camera, including zoom levels, camera modes, and camera positioning. Use these features to provide a better navigation and browsing experience.
Overview
MapDisplayManager provides functionality for:
- Setting absolute zoom levels
- Changing zoom incrementally (zoom in/out)
- Observing zoom level changes
- Setting camera modes (2D, 3D, overview)
- Recentering the camera to current position
Setting camera zoom level
Set an absolute zoom level directly:
1import android.util.Log2import com.tomtom.automotive.integration.client.api.mapdisplay.MapDisplayManager3import com.tomtom.automotive.integration.client.api.mapdisplay.camera.setZoomLevel.SetCameraZoomLevelCallback4import com.tomtom.automotive.integration.client.api.mapdisplay.camera.setZoomLevel.SetCameraZoomLevelParameters5import com.tomtom.automotive.integration.client.api.mapdisplay.camera.setZoomLevel.SetCameraZoomLevelResponse6import com.tomtom.automotive.integration.client.common.Callback78private val TAG = "MapDisplay"910fun applyZoomLevel(mapDisplayManager: MapDisplayManager, zoomLevel: Double) {11 mapDisplayManager.setCameraZoomLevel(12 SetCameraZoomLevelParameters(zoomLevel),13 object : SetCameraZoomLevelCallback {14 override fun onResponse(response: SetCameraZoomLevelResponse) {15 Log.d(TAG, "Zoom level set to: ${response.currentZoomLevel}")16 }1718 override fun onFunctionalityUnavailable(reason: Callback.Reason) {19 Log.e(TAG, "Set zoom level unavailable: ${reason.devMessage}")20 }21 }22 )23}
Zoom level ranges
Zoom levels typically range from:
- Minimum: 1 (world view)
- Maximum: 23 (street-level detail)
- Recommended for navigation: 14-17
- Recommended for POI search: 13-15
Changing zoom incrementally
Zoom in or out by a number of steps:
1import android.util.Log2import com.tomtom.automotive.integration.client.api.mapdisplay.MapDisplayManager3import com.tomtom.automotive.integration.client.api.mapdisplay.camera.changeZoomLevel.ChangeCameraZoomLevelCallback4import com.tomtom.automotive.integration.client.api.mapdisplay.camera.changeZoomLevel.ChangeCameraZoomLevelParameters5import com.tomtom.automotive.integration.client.api.mapdisplay.camera.changeZoomLevel.ChangeCameraZoomLevelResponse6import com.tomtom.automotive.integration.client.common.Callback78private val TAG = "MapDisplay"910fun zoomInBy(mapDisplayManager: MapDisplayManager, steps: Double) {11 mapDisplayManager.changeCameraZoomLevel(12 ChangeCameraZoomLevelParameters.CameraZoomIn(steps),13 object : ChangeCameraZoomLevelCallback {14 override fun onResponse(response: ChangeCameraZoomLevelResponse) {15 Log.d(TAG, "Zoomed in to level: ${response.currentZoomLevel}")16 }1718 override fun onFunctionalityUnavailable(reason: Callback.Reason) {19 Log.e(TAG, "Zoom in unavailable: ${reason.devMessage}")20 }21 }22 )23}
1import android.util.Log2import com.tomtom.automotive.integration.client.api.mapdisplay.MapDisplayManager3import com.tomtom.automotive.integration.client.api.mapdisplay.camera.changeZoomLevel.ChangeCameraZoomLevelCallback4import com.tomtom.automotive.integration.client.api.mapdisplay.camera.changeZoomLevel.ChangeCameraZoomLevelParameters5import com.tomtom.automotive.integration.client.api.mapdisplay.camera.changeZoomLevel.ChangeCameraZoomLevelResponse6import com.tomtom.automotive.integration.client.common.Callback78private val TAG = "MapDisplay"910fun zoomOutBy(mapDisplayManager: MapDisplayManager, steps: Double) {11 mapDisplayManager.changeCameraZoomLevel(12 ChangeCameraZoomLevelParameters.CameraZoomOut(steps),13 object : ChangeCameraZoomLevelCallback {14 override fun onResponse(response: ChangeCameraZoomLevelResponse) {15 Log.d(TAG, "Zoomed out to level: ${response.currentZoomLevel}")16 }1718 override fun onFunctionalityUnavailable(reason: Callback.Reason) {19 Log.e(TAG, "Zoom out unavailable: ${reason.devMessage}")20 }21 }22 )23}
Observing zoom level changes
Subscribe to receive updates when the zoom level changes:
1import android.util.Log2import com.tomtom.automotive.integration.client.api.mapdisplay.MapDisplayManager3import com.tomtom.automotive.integration.client.api.mapdisplay.camera.observeZoomLevel.CameraZoomLevelInfo4import com.tomtom.automotive.integration.client.api.mapdisplay.camera.observeZoomLevel.ChangeCameraZoomLevelListener5import com.tomtom.automotive.integration.client.common.Callback6import com.tomtom.automotive.integration.client.common.SdkReleasable78private val TAG = "MapDisplay"9private var observeCameraZoomLevelReleasable: SdkReleasable? = null1011fun observeCameraZoomLevel(mapDisplayManager: MapDisplayManager) {12 observeCameraZoomLevelReleasable = mapDisplayManager.observeCameraZoomLevel(13 object : ChangeCameraZoomLevelListener {14 override fun onCameraZoomLevelChanged(cameraZoomLevelInfo: CameraZoomLevelInfo) {15 val currentZoom = cameraZoomLevelInfo.currentZoomLevel16 Log.d(TAG, "Current zoom level: $currentZoom")17 }1819 override fun onFunctionalityUnavailable(reason: Callback.Reason) {20 Log.e(TAG, "Zoom level observation unavailable: ${reason.devMessage}")21 }22 }23 )24}2526fun unObserveCameraZoomLevel() {27 observeCameraZoomLevelReleasable?.release()28 observeCameraZoomLevelReleasable = null29}
Setting camera mode
Switch between different camera following modes:
1import android.util.Log2import com.tomtom.automotive.integration.client.api.mapdisplay.MapDisplayManager3import com.tomtom.automotive.integration.client.api.mapdisplay.camera.setCameraMode.SetCameraModeCallback4import com.tomtom.automotive.integration.client.api.mapdisplay.camera.setCameraMode.SetCameraModeFailure5import com.tomtom.automotive.integration.client.api.mapdisplay.camera.setCameraMode.SetCameraModeParameters6import com.tomtom.automotive.integration.client.api.mapdisplay.camera.setCameraMode.SetCameraModeResponse7import com.tomtom.automotive.integration.client.api.model.camera.CameraMode8import com.tomtom.automotive.integration.client.common.Callback9import com.tomtom.automotive.integration.client.common.Result1011private val TAG = "MapDisplay"1213fun setCameraMode(mapDisplayManager: MapDisplayManager, cameraMode: CameraMode) {14 mapDisplayManager.setCameraMode(15 SetCameraModeParameters(cameraMode),16 object : SetCameraModeCallback {17 override fun onResult(result: Result<SetCameraModeResponse, SetCameraModeFailure>) {18 when (result) {19 is Result.Success -> {20 Log.d(TAG, "Camera mode set to: ${result.value.cameraMode}")21 }22 is Result.Failure -> {23 Log.e(TAG, "Failed to set camera mode: ${result.failure}")24 }25 }26 }2728 override fun onFunctionalityUnavailable(reason: Callback.Reason) {29 Log.e(TAG, "Set camera mode unavailable: ${reason.devMessage}")30 }31 }32 )33}
Available camera modes
CameraMode.FOLLOW_ROUTE_2D- Top-down camera focused on the chevron, oriented in the same directionCameraMode.FOLLOW_ROUTE_3D- Tilted camera focused on the chevron, oriented in the same directionCameraMode.NORTH_UP- Top-down camera focused on the chevron, oriented towards the NorthCameraMode.ROUTE_OVERVIEW- Route overview camera that fits the entire route on the screen (requires active route)
Recentering camera
Recenter the map to the current vehicle position:
1import android.util.Log2import com.tomtom.automotive.integration.client.api.mapdisplay.MapDisplayManager3import com.tomtom.automotive.integration.client.api.mapdisplay.camera.recenterCamera.RecenterCameraCallback4import com.tomtom.automotive.integration.client.api.mapdisplay.camera.recenterCamera.RecenterCameraFailure5import com.tomtom.automotive.integration.client.api.mapdisplay.camera.recenterCamera.RecenterCameraResponse6import com.tomtom.automotive.integration.client.common.Callback7import com.tomtom.automotive.integration.client.common.Result89private val TAG = "MapDisplay"1011fun recenterCamera(mapDisplayManager: MapDisplayManager) {12 mapDisplayManager.recenterCamera(13 object : RecenterCameraCallback {14 override fun onResult(result: Result<RecenterCameraResponse, RecenterCameraFailure>) {15 when (result) {16 is Result.Success -> {17 Log.d(TAG, "Camera recentered, was already centered: ${result.value.wasCameraCenteredPreviously}")18 }19 is Result.Failure -> {20 Log.e(TAG, "Failed to recenter: ${result.failure}")21 }22 }23 }2425 override fun onFunctionalityUnavailable(reason: Callback.Reason) {26 Log.e(TAG, "Recenter camera unavailable: ${reason.devMessage}")27 }28 }29 )30}