Ancorar conteúdo em locais reais

Dispositivos XR relevantes
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos XR.
Óculos XR com fio

As âncoras geoespaciais são um tipo de âncora que permite colocar conteúdo 3D com coordenadas geográficas usando a API Geospatial.

As âncoras geoespaciais usam uma latitude e uma longitude para determinar o posicionamento. A latitude e a longitude são definidas pela especificação WGS84, que são as mesmas coordenadas mostradas em um sistema GPS típico.

Determinar a latitude e a longitude de um local

Se você tiver um ponto de interesse específico em mente, use o Google Maps para determinar a latitude e a longitude dele:

  1. Acesse o Google Maps em um computador desktop.
  2. Acesse Camadas > Mais.

    O botão de camadas no Google Maps

    Botão "Mais" no Google Maps

  3. Mude o Tipo de mapa para Satélite e desmarque a caixa de seleção Visualização do globo no canto inferior esquerdo da tela.

    As opções de tipo de mapa no Google Maps

    Isso força uma perspectiva 2D e elimina possíveis erros que podem vir de uma visualização 3D em ângulo.

  4. No mapa, clique com o botão direito do mouse no local e selecione a longitude e a latitude para copiá-las para a área de transferência.

Converter uma posição na área do usuário em uma âncora geoespacial

Se você puder viajar até o ponto de interesse, determine a latitude, a longitude e a altitude de uma leitura local convertendo uma pose local do dispositivo em uma pose geoespacial.

Posicionar conteúdo em uma âncora geoespacial

As âncoras geoespaciais exigem um valor de altitude, que é relativo ao elipsoide WGS84 ou ao terreno ou telhado.

  • Para valores de altitude relativos ao elipsoide WGS84, use Geospatial.createAnchor:

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

  • Para valores de altitude relativos ao terreno ou a um telhado, use Geospatial.createAnchorOnSurface, com GeospatialSurface.TERRAIN e GeospatialSurface.ROOFTOP, respectivamente, para especificar como a altitude final deve ser interpretada:

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

    Ao usar GeospatialSurface.ROOFTOP, a altitude padrão é a do terreno, quando não está em um edifício.

Em seguida, verifique o resultado da chamada de criação:

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

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

Por fim, use a âncora para posicionar o conteúdo em 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)