Fija contenido en ubicaciones del mundo real

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Lentes de realidad extendida con cable

Las anclas geoespaciales son un tipo de ancla que te permite colocar contenido en 3D con coordenadas geográficas usando la API de Geospatial.

Los Geospatial anchors usan la latitud y la longitud para determinar su posicionamiento. La latitud y la longitud se definen según la especificación WGS84, que son las mismas coordenadas que se muestran en un sistema GPS típico.

Determina la latitud y la longitud de una ubicación

Si tienes un lugar de interés específico en mente, usa Google Maps para determinar su latitud y longitud:

  1. Ve a Google Maps en una computadora.
  2. Navega a Capas > Más.

    El botón de capas en Google Maps

    El botón Más en Google Maps

  3. Cambia el Tipo de mapa a Satélite y desmarca la casilla de verificación Vista de globo terráqueo en la esquina inferior izquierda de la pantalla.

    Las opciones de tipo de mapa en Google Maps

    Esto fuerza una perspectiva en 2D y elimina los posibles errores que pueden surgir de una vista en 3D en ángulo.

  4. En el mapa, haz clic con el botón derecho en la ubicación y selecciona la longitud y la latitud para copiarlas en el portapapeles.

Convierte una posición en el área del usuario en un ancla geoespacial

Si puedes viajar al lugar de interés, puedes determinar la latitud, la longitud y la altitud a partir de una lectura local convirtiendo una pose local del dispositivo en una pose geoespacial.

Posiciona el contenido en un ancla geoespacial

Los anclajes geoespaciales requieren un valor de altitud, que es relativo al elipsoide WGS84 o al terreno o techo.

  • Para los valores de altitud relativos al elipsoide WGS84, usa Geospatial.createAnchor:

    val createAnchorResult = geospatial.createAnchor(
        latitude,
        longitude,
        altitude,
        Quaternion.Identity,
    )

  • Para los valores de altitud relativos al terreno o a un techo, usa Geospatial.createAnchorOnSurface, con GeospatialSurface.TERRAIN y GeospatialSurface.ROOFTOP, respectivamente, para especificar cómo se debe interpretar la altitud final:

    val createAnchorResult = geospatial.createAnchorOnSurface(
        latitude,
        longitude,
        altitude,
        Quaternion.Identity,
        GeospatialSurface.TERRAIN,
    )

    Cuando se usa GeospatialSurface.ROOFTOP, la altitud predeterminada es la del terreno, siempre que no se coloque en un edificio.

Luego, verifica el resultado de la llamada de creación:

when (createAnchorResult) {
    is AnchorCreateSuccess -> {
        // Use anchorCreateResult.anchor to render content at the result.
    }

    else -> {
        // Anchor create failed.
        // See AnchorCreateResult for possible failure reasons.
    }
}

Por último, usa el ancla para posicionar el contenido en 3D:

Compose XR

Subspace(FollowTarget.anchor(anchorCreateResult.anchor)) {
    SpatialPanel {
        GeospatialContent()
    }
}

SceneCore

val anchorSpace = AnchorSpace.create(session, anchorCreateResult.anchor)
val contentEntity = createGeospatialContentEntity(context, session)
anchorSpace.addChild(contentEntity)