コンテンツにスキップ

イントロダクション

MapConductor Android SDK ドキュメント

Section titled “MapConductor Android SDK ドキュメント”

MapConductor は、Google Maps、Mapbox、HERE、ArcGIS、そして MapLibre を含む複数の地図SDKに対して、共通の API を提供する統一地図 SDK です。このドキュメントでは、Maven から配布される v1.1.2 向けの公開 API コンポーネントについて説明します。

MapConductor SDK を使うと、単一の API で複数の地図SDKを扱えるようになります。各地図SDK固有の実装は SDK 側で吸収され、アプリケーションからは一貫したインターフェースで操作できます。

  • Google Maps: GoogleMapViewStateImpl / GoogleMapView
  • Mapbox: MapboxViewStateImpl / MapboxMapView
  • HERE Maps: HereViewStateImpl / HereMapView
  • ArcGIS: ArcGISMapViewStateImpl / ArcGISMapView
  • MapLibre: MapLibreViewStateImpl / MapLibreMapView

SDK は、以下のような基本的な地理情報クラスを提供します。

  • GeoPoint: 緯度・経度・高度を表す地理座標
  • GeoRectBounds: 南西・北東の2点で表される矩形の地理範囲
  • MapCameraPosition: カメラ位置(ターゲット、ズーム、方位、傾き、パディング)

SDK は次のようなコアコンポーネントを提供します。

  1. マップビューコンポーネント: 地図SDK別のマップビュー(GoogleMapView, MapboxMapView, HereMapView, ArcGISMapView, MapLibreMapView)
  2. Marker: カスタマイズ可能なアイコンやインタラクションを持つポイントマーカー
  3. Circle: スタイル指定可能な円形オーバーレイ
  4. Polyline: 複数点を結ぶ線分
  5. Polygon: 枠線と塗りつぶしを持つ多角形
  6. GroundImage: 地理座標に配置する画像オーバーレイ(Google Maps のみ対応)

MapConductor をプロジェクトで利用するには、次のステップに従います。

依存関係やバージョンの詳細は、チュートリアル を参照してください。

重要: MapConductor は既存の地図 SDK の上に統一 API レイヤーを提供するライブラリです。そのため、MapConductor を利用する前に、各地図 SDK を個別にセットアップする必要があります。

各地図SDKは、それぞれ API キー、パーミッション、設定などの準備が必要です。

利用する地図 SDK だけをセットアップすればかまいません。

マップビューを作成し、マーカーと円を表示する例です。

@Composable
fun BasicMapExample(modifier: Modifier = Modifier) {
val sanFrancisco = GeoPointImpl.fromLatLong(37.7749, -122.4194)
val camera = MapCameraPositionImpl(
position = sanFrancisco,
zoom = 13.0,
)
// 利用する地図 SDK に置き換えてください
// - Google Maps -> rememberGoogleMapViewState
// - Mapbox -> rememberMapboxViewState
// ... など
val mapViewState = rememberGoogleMapViewState(
cameraPosition = camera,
)
// MapView も利用する地図SDKに応じて切り替えます
// - Google Maps -> GoogleMapView
// - Mapbox -> MapboxMapView
// ... など
GoogleMapView(
modifier = modifier,
state = mapViewState,
onMapClick = { geoPoint ->
println("Map clicked at: ${geoPoint.latitude}, ${geoPoint.longitude}")
},
onMarkerClick = { markerState ->
println("Marker clicked: ${markerState.extra}")
}
) {
// マーカーを追加
Marker(
position = sanFrancisco,
icon = DefaultIcon(label = "SF"),
extra = "San Francisco marker"
)
// 円を追加
Circle(
center = sanFrancisco,
radiusMeters = 1000.0,
strokeColor = Color.Blue,
fillColor = Color.Blue.copy(alpha = 0.3f)
)
}
}

マーカーと円が描画された地図

マップ地図SDKを切り替えるには、MapViewState の実装を変更するだけです。

// Google Maps
val googleMapState = rememberGoogleMapViewState()
// Mapbox
val mapboxState = rememberMapboxMapViewState()
// HERE Maps
val hereState = rememberHereMapViewState()
// ArcGIS
val arcgisState = rememberArcGISMapViewState()
// MapLibre
val mapLibreState = rememberMapLibreMapViewState()

その他のコードは共通で、すべてのコンポーネントを地図SDK間で同じように扱えます。

v1.1.0 と比較した v1.1.2 の主な改善点は次のとおりです。

  • 地図の表示範囲を移動させたときにInfoBubbleの表示位置が再計算されないバグを修正

v1.0.0 と比較した v1.1.0 の主な改善点は次のとおりです。

  • 各地図SDKでカメラ移動イベント (onCameraMoveStart, onCameraMove, onCameraMoveEnd) を統一
  • MapViewState のカメラ位置と VisibleRegion 連携の改善
  • マーカーコントローラのインターフェースを整理し、地図SDK実装を明確化
  • 例示アプリに高度なカメラ制御と VisibleRegion の利用例を追加