コンテンツにスキップ

ArcGISMapViewHolder

ArcGIS SDK固有の機能にアクセスするためには、ArcGISMapViewHolderを使います。 ArcGISMapViewHolderの定義は次のとおりです。

typealias ArcGISMapViewHolder = MapViewHolderInterface<WrapSceneView, SceneView>
class ArcGISMapViewHolder(
override val mapView: WrapSceneView,
override val map: SceneView,
) : MapViewHolderInterface<WrapSceneView, SceneView> {
fun toScreenOffset(position: GeoPointInterface): Offset?
suspend fun fromScreenOffset(offset: Offset): GeoPoint?
}
  • mapView: WrapSceneView: SceneViewを囲うためのWrapSceneView
  • map: SceneView: MapViewを操作するためのArcGISSceneクラス
  • toScreenOffset(position: GeoPointInterface): Offset?: GeoPointで示す地図上の位置を、MapView左上を(0,0)としたDp値で返します
  • fromScreenOffsetSync(offset: Offset): GeoPoint?: MapView左上を(0,0)としたDp値で指定した位置の、地図上でのGeoPoint位置を返します
  • fromScreenOffset(offset: Offset): GeoPoint?: MapView左上を(0,0)としたDp値で指定した位置の、地図上でのGeoPoint位置を返します

ArcGISMapViewHolderは、地図の初期化後に getMapViewHolder()を通じて取得できます。

// ArcGIS
val arcgisState = rememberArcGISMapViewState()
val arcgisHolder: ArcGISMapViewHolder? = arcgisState.getMapViewHolder();
@Composable
fun BasicMapExample(
modifier: Modifier = Modifier
) {
// 地図のカメラ位置
val mapViewState = rememberArcGISMapViewState(
cameraPosition = MapCameraPosition(
position = GeoPoint.fromLatLong(40.40195, -3.68698),
zoom = 8.0
),
)
// AuthenticatorStateを設定
val authenticatorState = remember { AuthenticatorState() }
// ViewHolderの保持
var arcGisMapViewHolder by remember { mutableStateOf<ArcGISMapViewHolder?>(null) }
LaunchedEffect(arcGisMapViewHolder) {
// 交通情報のレイヤーを表示
arcGisMapViewHolder?.let { holder ->
val trafficLayer =
ArcGISMapImageLayer("https://traffic.arcgis.com/arcgis/rest/services/World/Traffic/MapServer")
holder.map.scene!!.operationalLayers.add(trafficLayer)
}
}
ArcGISMapView(
state = mapViewState,
modifier = modifier.fillMaxSize(),
sdkInitialize = { context ->
ArcGISOAuthHybridInitialize(
// ログインダイアログを表示する AuthenticatorState
authenticatorState = authenticatorState
// ArcGISポータルのURL
portalUrl = "https://(your).maps.arcgis.com/",
// OAuth2アプリケーションのリダイレクトURL
redirectUrl = "(application redirectUrl)",
// OAuth2アプリケーションのクライアントID
clientId = "(application clientId)",
// (オプション)
// OAuth2アプリケーションのクライアントシークレット
// 省略した場合はログインダイアログが表示されます
clientSecret = "(application client secret)",
)
},
onMapLoaded = {
// ViewHolderの取得
arcGisMapViewHolder = mapViewState.getMapViewHolder()
}
) {}
// 認証UI(ユーザーログイン用)。ハイブリッド認証のフォールバックで使用されます。
Authenticator(authenticatorState = authenticatorState)
}