MapViewStateInterface
MapViewStateInterface is a core component that manages map initialization, camera position, and overall map state.
Each map SDK has its own implementation, but MapConductor provides a unified API across all providers.
Map SDK Implementations
Section titled “Map SDK Implementations”MapConductor supports 5 map SDKs, each with its own MapViewStateInterface implementation:
GoogleMapViewState- Google MapsMapboxViewState- Mapbox MapHereViewState- HERE MapArcGISMapViewState- ArcGIS MapMapLibreViewState- MapLibre Map
Core Properties
Section titled “Core Properties”Initialization State
Section titled “Initialization State”isInitialized: StateFlow<InitState>: Tracks the map’s initialization stateNotStarted: Map initialization has not startedInitializing: Map is currently initializingInitialized: Map is ready to useFailed: Initialization failed
Camera Management
Section titled “Camera Management”cameraPosition: MapCameraPosition: Current camera position and initial camera position when the map loads
Map Design
Section titled “Map Design”mapDesignType: ActualMapDesignType: Map style/design (provider-specific)
Camera Movement
Section titled “Camera Movement”-
moveCameraTo(GeoPoint, Long?)fun moveCameraTo(position: GeoPoint,durationMillis: Long? = 0,)- Moves the camera to the specified position. Zoom and tilt angles are maintained from the time
moveCameraTois called. - When
durationMillisis specified in milliseconds, the camera moves with animation.
- Moves the camera to the specified position. Zoom and tilt angles are maintained from the time
-
moveCameraTo(MapCameraPosition, Long?)fun moveCameraTo(cameraPosition: MapCameraPosition,durationMillis: Long? = 0,)- Moves the camera using a
MapCameraPosition. Zoom and tilt can be specified at the same time. Properties that are omitted maintain their values from whenmoveCameraTois called. - When
durationMillisis specified in milliseconds, the camera moves with animation.
- Moves the camera using a
Usage Examples
Section titled “Usage Examples”Camera Control
Section titled “Camera Control”@Composablefun CameraControlExample() { val london = GeoPoint.fromLatLong(51.4985, 0.0) val camera = MapCameraPosition(position = london, zoom = 8.0) val mapViewState = rememberHereMapViewState(cameraPosition = camera)
Column(modifier = modifier) { Button( onClick = { val sanFrancisco = GeoPoint.fromLatLong(37.7749, -122.4194) mapViewState.moveCameraTo( position = sanFrancisco, durationMillis = 3000 ) } ) { Text("Move to San Francisco") }
HereMapView( modifier = Modifier.fillMaxSize(), state = mapViewState, onCameraMoveEnd = { println("Camera movement completed") } ) { // Marker, Polygon, etc } }}Map Design Switching
Section titled “Map Design Switching”@Composablefun MapDesignSwitchExample() { val london = GeoPoint.fromLatLong(51.4985, 0.0) val camera = MapCameraPosition(position = london, zoom = 8.0) val mapViewState = rememberHereMapViewState( cameraPosition = camera, mapDesign = HereMapDesign.NormalDay )
Column(modifier = modifier) { Row(modifier = Modifier.fillMaxWidth()) { Button( onClick = { mapViewState.mapDesignType = HereMapDesign.NormalDay } ) { Text("NormalDay") } Spacer(modifier = Modifier.width(20.dp))
Button( onClick = { mapViewState.mapDesignType = HereMapDesign.NormalNight } ) { Text("NormalNight") }
Spacer(modifier = Modifier.width(20.dp)) Button( onClick = { mapViewState.mapDesignType = HereMapDesign.HybridDay } ) { Text("HYBRID_DAY") } }
HereMapView( state = mapViewState ) { // Marker, Polyline... etc, } }}Event Handling
Section titled “Event Handling”MapViewStateInterface works with your chosen map provider component to provide comprehensive event handling:
// Replace MapView with your chosen map provider, such as GoogleMapView, MapboxMapViewMapView( state = mapViewState, onMapLoaded = { println("Map loaded successfully") }, onMapClick = { geoPoint -> println("Map clicked at: ${geoPoint.latitude}, ${geoPoint.longitude}") }) { // Map content}Best Practices
Section titled “Best Practices”- State Initialization: Initialize MapViewStateInterface with appropriate camera position and bounds
- Camera Animation: Use reasonable animation durations for smooth user experience (500ms - 3000ms)
- State Stability: Use
rememberto maintain state across recompositions - Reactive Updates: Use StateFlow for reactive updates to initialization state
- Error Handling: Check initialization state before performing camera operations
- Memory Management: Clean up listeners when the map is no longer needed