Skip to content

HereMapViewHolder

To access HERE SDK-specific features, use HereMapViewHolder. The definition of HereMapViewHolder is as follows:

typealias HereViewHolder = MapViewHolderInterface<MapView, MapScene>
class HereViewHolder(
override val mapView: MapView,
override val map: MapScene,
) : MapViewHolderInterface<MapView, MapScene> {
fun toScreenOffset(position: GeoPointInterface): Offset?
suspend fun fromScreenOffset(offset: Offset): GeoPoint?
}
  • mapView: MapView: MapView generated internally by the HereMapView component
  • map: MapScene: MapScene class for manipulating the MapView
  • toScreenOffset(position: GeoPointInterface): Offset?: Returns the map position indicated by GeoPointInterface as a Dp value with the upper left corner of MapView as (0,0)
  • fromScreenOffset(offset: Offset): GeoPoint?: Returns the GeoPointInterface position on the map at the position specified by the Dp value with the upper left corner of MapView as (0,0)

HereMapViewHolder can be obtained through getMapViewHolder() after map initialization.

// HERE Maps
val hereState = rememberHereMapViewState()
val hereHolder: HereMapViewHolder? = hereState.getMapViewHolder()
@Composable
fun MapViewHolderHereMapsExample(modifier: Modifier = Modifier) {
// Map camera position
val mapViewState = rememberHereMapViewState(
cameraPosition = MapCameraPosition(
position = GeoPoint.fromLatLong(35.6812, 139.7671),
zoom = 12.0
),
)
// Make it mutableStateOf so it re-renders when mapScheme changes
var mapScheme by remember { mutableStateOf(MapScheme.NORMAL_DAY) }
// Get ViewHolder
val hereMapViewHolder = mapViewState.getMapViewHolder()
LaunchedEffect(hereMapViewHolder, mapScheme) {
if (hereMapViewHolder == null) return@LaunchedEffect
hereMapViewHolder.map.loadScene(mapScheme) { errorCode ->
if (errorCode != null) {
Log.e("HERE", "Failed to load map scene: ${errorCode.name}")
}
}
}
Column(modifier = modifier) {
Row(
modifier = Modifier.fillMaxWidth(),
) {
Spacer(modifier = Modifier.size(20.dp))
// Normal map display
Button(onClick = {
mapScheme = MapScheme.NORMAL_DAY
}) {
Text(
text = "Normal"
)
}
Spacer(modifier = Modifier.size(20.dp))
// Satellite imagery display
Button(onClick = {
mapScheme = MapScheme.SATELLITE
}) {
Text(
text = "Satellite"
)
}
}
HereMapView(
state = mapViewState,
modifier = Modifier.fillMaxSize(),
) {}
}
}