Skip to content

ArcGISMapViewHolder

Para acceder a las funciones específicas del SDK de ArcGIS, use el ArcGISMapViewHolder. La definición de ArcGISMapViewHolder es la siguiente:

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: WrapSceneView para envolver el SceneView
  • map: SceneView: Clase ArcGISScene para manipular el MapView
  • toScreenOffset(position: GeoPointInterface): Offset?: Devuelve la posición en el mapa indicada por GeoPointInterface como un valor Dp con la parte superior izquierda del MapView como (0,0)
  • fromScreenOffsetSync(offset: Offset): GeoPoint?: Devuelve la posición GeoPointInterface en el mapa para la posición especificada por el valor Dp con la parte superior izquierda del MapView como (0,0)
  • fromScreenOffset(offset: Offset): GeoPoint?: Devuelve la posición GeoPointInterface en el mapa para la posición especificada por el valor Dp con la parte superior izquierda del MapView como (0,0)

El ArcGISMapViewHolder se puede obtener a través de getMapViewHolder() después de que se inicializa el mapa.

// ArcGIS
val arcgisState = rememberArcGISMapViewState()
val arcgisHolder: ArcGISMapViewHolder? = arcgisState.getMapViewHolder();
@Composable
fun BasicMapExample(
modifier: Modifier = Modifier
) {
// Posición de la cámara del mapa
val mapViewState = rememberArcGISMapViewState(
cameraPosition = MapCameraPosition(
position = GeoPoint.fromLatLong(40.40195, -3.68698),
zoom = 8.0
),
)
// Configurar AuthenticatorState
val authenticatorState = remember { AuthenticatorState() }
// Mantener ViewHolder
var arcGisMapViewHolder by remember { mutableStateOf<ArcGISMapViewHolder?>(null) }
LaunchedEffect(arcGisMapViewHolder) {
// Mostrar capa de información de tráfico
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 para mostrar diálogo de inicio de sesión
authenticatorState = authenticatorState
// URL del portal de ArcGIS
portalUrl = "https://(your).maps.arcgis.com/",
// URL de redirección de la aplicación OAuth2
redirectUrl = "(application redirectUrl)",
// ID de cliente de la aplicación OAuth2
clientId = "(application clientId)",
// (Opcional)
// Secreto de cliente de la aplicación OAuth2
// Si se omite, se mostrará el diálogo de inicio de sesión
clientSecret = "(application client secret)",
)
},
onMapLoaded = {
// Obtener ViewHolder
arcGisMapViewHolder = mapViewState.getMapViewHolder()
}
) {}
// IU de autenticación (para inicio de sesión de usuario). Se usa como respaldo para autenticación híbrida.
Authenticator(authenticatorState = authenticatorState)
}