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