HereMapViewHolder
HERE SDK固有の機能にアクセスするためには、HereMapViewHolderを使います。
HereMapViewHolderの定義は次のとおりです。
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: HereMapViewコンポーネント内部で生成したMapViewmap: MapScene: MapViewを操作するためのMapSceneクラス
toScreenOffset(position: GeoPointInterface): Offset?: GeoPointで示す地図上の位置を、MapView左上を(0,0)としたDp値で返しますfromScreenOffset(offset: Offset): GeoPoint?: MapView左上を(0,0)としたDp値で指定した位置の、地図上でのGeoPoint位置を返します
HereMapViewHolderの取得
Section titled “HereMapViewHolderの取得”HereMapViewHolderは、地図の初期化後に getMapViewHolder()を通じて取得できます。
// HERE Mapsval hereState = rememberHereMapViewState()val hereHolder: HereMapViewHolder? = hereState.getMapViewHolder()@Composablefun MapViewHolderHereMapsExample(modifier: Modifier = Modifier) { // 地図のカメラ位置 val mapViewState = rememberHereMapViewState( cameraPosition = MapCameraPosition( position = GeoPoint.fromLatLong(35.6812, 139.7671), zoom = 12.0 ), )
// mutableStateOfにすることで、mapSchemeが変化したら 再描画 var mapScheme by remember { mutableStateOf(MapScheme.NORMAL_DAY) }
// 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))
// 通常の地図表示 Button(onClick = { mapScheme = MapScheme.NORMAL_DAY }) { Text( text = "Normal" ) } Spacer(modifier = Modifier.size(20.dp))
// 衛星画像表示 Button(onClick = { mapScheme = MapScheme.SATELLITE }) { Text( text = "Satellite" ) } }
HereMapView( state = mapViewState, modifier = Modifier.fillMaxSize(), ) {} }}