コンテンツにスキップ

MapViewState

MapViewState は、地図の初期化、カメラ位置、および全体的な地図状態を管理するコアコンポーネントです。 各地図SDKには独自の実装がありますが、MapConductorがそれらを統一したAPIを提供しています。

MapConductor は5つの地図SDKをサポートしており、それぞれに独自の MapViewState 実装があります:

  • GoogleMapViewStateImpl - Google Maps
  • MapboxViewStateImpl - Mapbox Map
  • HereViewStateImpl - HERE Map
  • ArcGISMapViewStateImpl - ArcGIS Map
  • MapLibreViewStateImpl - MapLibre Map
  • isInitialized: StateFlow<InitState>: 地図の初期化状態を追跡します
    • NotStarted: 地図の初期化が開始されていません
    • Initializing: 地図は現在初期化中です
    • Initialized: 地図は使用準備ができています
    • Failed: 初期化が失敗しました
  • cameraPosition: MapCameraPositionImpl: 現在のカメラ位置, 地図読み込み時の初期カメラ位置
  • mapDesignType: ActualMapDesignType: 地図のスタイル/デザイン(地図SDK固有)
  • moveCameraTo(GeoPointImpl, Long?)

    fun moveCameraTo(
    position: GeoPointImpl,
    durationMills: Long? = 0,
    )
    • position で指定した位置に、カメラを移動します。ズームや傾き角度は moveCameraToを実行したときの値を維持します。
    • durationMillsにミリ秒を指定すると、アニメーション付きでカメラを移動します。
@Composable
fun 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")
}
) {
// 地図コンテンツ
}
}
}
@Composable
fun 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,
) {
// 地図コンテンツ
}
}
}

MapViewState は選択した地図SDKコンポーネントと連携して、包括的なイベント処理を提供します:

// MapView を GoogleMapView、MapboxMapView などのマップ地図SDKに置き換えてください
MapView(
state = mapViewState,
onMapLoaded = {
println("Map loaded successfully")
},
onMapClick = { geoPoint ->
println("Map clicked at: ${geoPoint.latitude}, ${geoPoint.longitude}")
}
) {
// 地図コンテンツ
}