コンテンツにスキップ

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コンポーネント内部で生成したMapView
  • map: MapScene: MapViewを操作するためのMapSceneクラス
  • toScreenOffset(position: GeoPointInterface): Offset?: GeoPointで示す地図上の位置を、MapView左上を(0,0)としたDp値で返します
  • fromScreenOffset(offset: Offset): GeoPoint?: MapView左上を(0,0)としたDp値で指定した位置の、地図上でのGeoPoint位置を返します

HereMapViewHolderは、地図の初期化後に getMapViewHolder()を通じて取得できます。

// HERE Maps
val hereState = rememberHereMapViewState()
val hereHolder: HereMapViewHolder? = hereState.getMapViewHolder()
@Composable
fun 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(),
) {}
}
}