コンテンツにスキップ

MapViewStateInterface

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

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

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

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

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

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