Usar edifícios e terrenos ao seu redor no SDK do Android (Kotlin/Java)

As APIs Streetscape Geometry fornecem a geometria de terrenos, edifícios ou outras estruturas em uma cena. A geometria pode ser usada para obstrução, renderização ou posicionamento de conteúdo de RA por meio de APIs de hit-test. Os dados do Streetscape Geometry são obtidos por meio de imagens do Google Street View.

Testar o exemplo

O app de exemplo geospatial_java demonstra como conseguir e renderizar geometrias da paisagem urbana.

Configurar a API Geospatial

Para usar a geometria da paisagem urbana, você precisa configurar a API Geospatial no seu projeto. Siga as instruções em Como ativar a API Geospatial para configurar a API Geospatial.

Ativar a geometria da paisagem urbana

A API Geospatial extrai dados da geometria da paisagem urbana quando GeospatialMode é definido como GeospatialMode.ENABLED e StreetscapeGeometryMode é definido como StreetscapeGeometryMode.ENABLED.

Java

Config config = session.getConfig();
// Streetscape Geometry requires the Geospatial API to be enabled.
config.setGeospatialMode(Config.GeospatialMode.ENABLED);
// Enable Streetscape Geometry.
config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED);
session.configure(config);

Kotlin

session.configure(
  session.config.apply {
    // Streetscape Geometry requires the Geospatial API to be enabled.
    geospatialMode = Config.GeospatialMode.ENABLED
    // Enable Streetscape Geometry.
    streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
  }
)

Extrair a geometria da paisagem urbana em uma sessão do ARCore

Use Session.getAllTrackables() e StreetscapeGeometry.class para filtrar os resultados.

Java

session.getAllTrackables(StreetscapeGeometry.class);

Kotlin

session.getAllTrackables(StreetscapeGeometry::class.java)

Entenda o StreetscapeGeometry

StreetscapeGeometry contém informações sobre uma construção:

Criação de LOD 1

O StreetscapeGeometry.Quality.BUILDING_LOD_1 consiste em impressões de construção extrudadas para cima até uma parte superior plana. A altura das construções pode estar incorreta.

LOD 2 do edifício

StreetscapeGeometry.Quality.BUILDING_LOD_2 terá uma geometria de maior fidelidade. Paredes e telhados de malha vão se aproximar mais do formato do edifício. Recursos menores, como chaminés ou aberturas no telhado, ainda podem sair da rede mesh.

Entenda o Mesh

Mesh é uma malha de polígonos que representa uma reconstrução de superfície da geometria do Streetscape. Cada Mesh inclui um buffer de vértice e um buffer de índice:

Anexar conteúdo de RA a um StreetscapeGeometry

Há duas maneiras de anexar conteúdo de RA à geometria do Street View:

Executar um teste de hit em StreetscapeGeometry

Frame.hitTest() pode ser usado para fazer testes de hit com a geometria da paisagem urbana. Se houver interseções, HitResult vai conter informações de pose sobre o local do hit, além de uma referência ao StreetscapeGeometry que foi atingido. Essa geometria Streetscape pode ser transmitida para Trackable.createAnchor() para criar uma âncora anexada a ela.

Java

for (HitResult hit : frame.hitTest(singleTapEvent)) {
  if (hit.getTrackable() instanceof StreetscapeGeometry) {
    Pose hitPose = hit.getHitPose();
    hit.getTrackable().createAnchor(hitPose);
  }
}

Kotlin

for (hit in frame.hitTest(singleTapEvent)) {
  if (hit.trackable is StreetscapeGeometry) {
    val hitPose = hit.hitPose
    hit.trackable.createAnchor(hitPose)
  }
}

Ativar a profundidade geoespacial

A Geospatial Depth combina a Streetscape Geometry com a entrada do sensor local para melhorar os dados de profundidade. Quando a opção "Geospatial Depth" está ativada, as imagens de profundidade bruta e de saída são modificadas para incluir a geometria rasterizada do Streetscape Geometry, além da profundidade observada localmente. Isso pode melhorar a precisão das poses usando a profundidade.