MapViewState
MapViewState は、地図の初期化、カメラ位置、および全体的な地図状態を管理するコアコンポーネントです。
各地図SDKには独自の実装がありますが、MapConductorがそれらを統一したAPIを提供しています。
地図SDK実装
Section titled “地図SDK実装”MapConductor は5つの地図SDKをサポートしており、それぞれに独自の MapViewState 実装があります:
GoogleMapViewStateImpl- Google MapsMapboxViewStateImpl- Mapbox MapHereViewStateImpl- HERE MapArcGISMapViewStateImpl- ArcGIS MapMapLibreViewStateImpl- MapLibre Map
コアプロパティ
Section titled “コアプロパティ”isInitialized: StateFlow<InitState>: 地図の初期化状態を追跡しますNotStarted: 地図の初期化が開始されていませんInitializing: 地図は現在初期化中ですInitialized: 地図は使用準備ができていますFailed: 初期化が失敗しました
cameraPosition: MapCameraPositionImpl: 現在のカメラ位置, 地図読み込み時の初期カメラ位置
地図デザイン
Section titled “地図デザイン”mapDesignType: ActualMapDesignType: 地図のスタイル/デザイン(地図SDK固有)
-
moveCameraTo(GeoPointImpl, Long?)fun moveCameraTo(position: GeoPointImpl,durationMills: Long? = 0,)positionで指定した位置に、カメラを移動します。ズームや傾き角度はmoveCameraToを実行したときの値を維持します。durationMillsにミリ秒を指定すると、アニメーション付きでカメラを移動します。
-
moveCameraTo(MapCameraPositionImpl, Long?)fun moveCameraTo(cameraPosition: MapCameraPositionImpl,durationMills: Long? = 0,)MapCameraPositionImplを指定して、カメラを特定の位置に移動します。ズームや傾きなどを同時に指定することができます。省略したプロパティは、moveCameraToを実行したときの値を維持します。durationMillsにミリ秒を指定すると、アニメーション付きでカメラを移動します。
カメラコントロール
Section titled “カメラコントロール”@Composablefun CameraControlExample() { val london = GeoPointImpl.fromLatLong(51.4985, 0.0) val camera = MapCameraPositionImpl( position = london, zoom = 8.0, ) val mapViewState = rememberHereMapViewState( cameraPosition = camera, )
Column( modifier = modifier, ) { Button( onClick = { val sanFrancisco = GeoPointImpl.fromLatLong(37.7749, -122.4194) mapViewState.moveCameraTo( position = sanFrancisco, durationMills = 3000 ) } ) { Text("Move to San Francisco") }
// MapView を GoogleMapView、MapboxMapView などのマップ地図SDKに置き換えてください HereMapView( state = mapViewState, onCameraMoveEnd = { println("Camera movement completed") } ) { // 地図コンテンツ } }}地図デザインの切り替え
Section titled “地図デザインの切り替え”@Composablefun MapDesignSwitchExample() { val london = GeoPointImpl.fromLatLong(51.4985, 0.0) val camera = MapCameraPositionImpl( position = london, zoom = 8.0, ) val mapViewState = rememberHereMapViewState( cameraPosition = camera, mapDesign = HereMapDesign.NormalDay, )
Column( modifier = modifier, ) { Row( modifier = Modifier.fillMaxWidth() ) { Button( onClick = { mapViewState.mapDesignType = HereMapDesign.NormalDay } ) { Text("NormalDay") } Spacer( modifier = Modifier.width(20.dp), )
Button( onClick = { mapViewState.mapDesignType = HereMapDesign.NormalNight } ) { Text("NormalNight") }
Spacer( modifier = Modifier.width(20.dp), ) Button( onClick = { mapViewState.mapDesignType = HereMapDesign.HybridDay } ) { Text("HYBRID_DAY") } }
// MapView を GoogleMapView、MapboxMapView などのマップ地図SDKに置き換えてください HereMapView( state = mapViewState, ) { // 地図コンテンツ } }}イベント処理
Section titled “イベント処理”MapViewState は選択した地図SDKコンポーネントと連携して、包括的なイベント処理を提供します:
// MapView を GoogleMapView、MapboxMapView などのマップ地図SDKに置き換えてくださいMapView( state = mapViewState, onMapLoaded = { println("Map loaded successfully") }, onMapClick = { geoPoint -> println("Map clicked at: ${geoPoint.latitude}, ${geoPoint.longitude}") }) { // 地図コンテンツ}