MapboxMapViewHolder
Mapbox SDK固有の機能にアクセスするためには、MapboxMapViewHolderを使います。
MapboxMapViewHolderの定義は次のとおりです。
typealias MapboxMapViewHolder = MapViewHolderInterface<MapView, MapboxMap>
class MapboxMapViewHolder( override val mapView: MapView, override val map: MapboxMap,) : MapViewHolderInterface<MapView, MapboxMap>, MapboxLifecycleObserver { fun toScreenOffset(position: GeoPointInterface): Offset? fun fromScreenOffsetSync(offset: Offset): GeoPoint? fun fromScreenOffset(coordinate: ScreenCoordinate): GeoPoint? suspend fun fromScreenOffset(offset: Offset): GeoPoint?}mapView: MapView: MapboxViewコンポーネント内部で生成したMapViewmap: Mapbox: MapViewを操作するためのMapboxクラス
toScreenOffset(position: GeoPointInterface): Offset?: GeoPointで示す地図上の位置を、MapView左上を(0,0)としたDp値で返しますfromScreenOffsetSync(offset: Offset): GeoPoint?: MapView左上を(0,0)としたDp値で指定した位置の、地図上でのGeoPoint位置を返しますfromScreenOffset(coordinate: ScreenCoordinate): GeoPoint?: MapView左上を(0,0)としたScreenCoordinate値で指定した位置の、地図上でのGeoPoint位置を返しますfromScreenOffset(offset: Offset): GeoPoint?: MapView左上を(0,0)としたDp値で指定した位置の、地図上でのGeoPoint位置を返します
MapboxMapViewHolderの取得
Section titled “MapboxMapViewHolderの取得”MapboxMapViewHolderは、地図の初期化後に getMapViewHolder()を通じて取得できます。
// Mapboxval mapboxState = rememberMapboxMapViewState()val mapboxHolder: MapboxMapViewHolder? = mapboxState.getMapViewHolder()class MainActivity : ComponentActivity() { lateinit var permissionsManager: PermissionsManager
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge()
if (PermissionsManager.areLocationPermissionsGranted(this)) { // 位置情報アクセス許可後の処理(例: Maps SDK の LocationComponent を有効化してデバイスの位置を表示) } else { permissionsManager = PermissionsManager(this.permissionsListener) permissionsManager.requestLocationPermissions(this) }
setContent { MapConductorSDKTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> BasicMapExample( modifier = Modifier .padding(innerPadding) .fillMaxSize(), ) } } } }
var permissionsListener: PermissionsListener = object : PermissionsListener { override fun onExplanationNeeded(permissionsToExplain: List<String>) { // 位置情報アクセス権限を取得するための説明を表示 }
override fun onPermissionResult(granted: Boolean) { if (granted) { // 位置情報アクセス許可後の処理(例: Maps SDK の LocationComponent を有効化してデバイスの位置を表示) } else { // ユーザーが権限を拒否した } } }}
@Composablefun BasicMapExample(modifier: Modifier = Modifier) { val mapViewState = rememberMapboxMapViewState( cameraPosition = MapCameraPosition( position = GeoPoint.fromLatLong(35.706400, 139.763635), zoom = 13.0 ), )
// ViewHolderの取得 var mapboxMapViewHolder by remember { mutableStateOf<MapboxMapViewHolder?>(null) } LaunchedEffect(mapboxMapViewHolder) { mapboxMapViewHolder?.let { holder -> with(holder.mapView) { location.locationPuck = createDefault2DPuck(withBearing = true) location.enabled = true location.pulsingEnabled = true location.puckBearing = PuckBearing.COURSE location.puckBearingEnabled = true viewport.transitionTo( targetState = viewport.makeFollowPuckViewportState(), transition = viewport.makeImmediateViewportTransition() ) } } }
MapboxMapView( state = mapViewState, modifier = modifier, onMapLoaded = { mapboxMapViewHolder = mapViewState.getMapViewHolder() } ) {}}