Skip to content

HereMapViewHolder

Para acceder a las funciones específicas del SDK de HERE, use el HereMapViewHolder. La definición de HereMapViewHolder es la siguiente:

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 generado dentro del componente HereMapView
  • map: MapScene: Clase MapScene para manipular el MapView
  • toScreenOffset(position: GeoPointInterface): Offset?: Devuelve la posición en el mapa indicada por GeoPointInterface como un valor Dp con la parte superior izquierda del MapView como (0,0)
  • fromScreenOffset(offset: Offset): GeoPoint?: Devuelve la posición GeoPointInterface en el mapa para la posición especificada por el valor Dp con la parte superior izquierda del MapView como (0,0)

El HereMapViewHolder se puede obtener a través de getMapViewHolder() después de que se inicializa el mapa.

// HERE Maps
val hereState = rememberHereMapViewState()
val hereHolder: HereMapViewHolder? = hereState.getMapViewHolder()
@Composable
fun MapViewHolderHereMapsExample(modifier: Modifier = Modifier) {
// Posición de la cámara del mapa
val mapViewState = rememberHereMapViewState(
cameraPosition = MapCameraPosition(
position = GeoPoint.fromLatLong(35.6812, 139.7671),
zoom = 12.0
),
)
// Hacerlo mutableStateOf para que se vuelva a renderizar cuando mapScheme cambie
var mapScheme by remember { mutableStateOf(MapScheme.NORMAL_DAY) }
// Obtener 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))
// Visualización de mapa normal
Button(onClick = {
mapScheme = MapScheme.NORMAL_DAY
}) {
Text(
text = "Normal"
)
}
Spacer(modifier = Modifier.size(20.dp))
// Visualización de imágenes satelitales
Button(onClick = {
mapScheme = MapScheme.SATELLITE
}) {
Text(
text = "Satellite"
)
}
}
HereMapView(
state = mapViewState,
modifier = Modifier.fillMaxSize(),
) {}
}
}