Le API Streetscape Geometry forniscono la geometria del terreno, degli edifici o di altre strutture in una scena. La geometria può essere utilizzata per occlusione, rendering o posizionamento di contenuti AR tramite API hit-test. I dati di Streetscape Geometry vengono ottenuti tramite le immagini di Google Street View.
Prova l'esempio
L'app di esempio geospatial_java mostra come ottenere e visualizzare le geometrie di Streetscape.
Configurare l'API Geospatial
Per utilizzare Streetscape Geometry, devi configurare l'API Geospatial nel tuo progetto. Segui le istruzioni su come attivare l'API Geospatial per configurare l'API geospaziale.
Attiva la geometria della strada
L'API Geospatial ottiene i dati di Streetscape Geometry quando GeospatialMode
è impostato su GeospatialMode.ENABLED
e StreetscapeGeometryMode
è impostato su 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 } )
Ottenere la geometria della strada in una sessione ARCore
UtilizzaSession.getAllTrackables()
e StreetscapeGeometry.class
per filtrare i risultati.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
Informazioni su StreetscapeGeometry
StreetscapeGeometry
contiene informazioni su un edificio:
-
StreetscapeGeometry.getType()
Identifica StreetscapeGeometry come terreno o un edificio. -
StreetscapeGeometry.getMesh()
Crea un poligonoMesh
corrispondente al terreno o all'edificio in questione. -
StreetscapeGeometry.getMeshPose()
Descrive l'origine della geometria. Tutti i punti inMesh
devono essere trasformati daStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Fornisce la qualità dei dati mesh. I livelli di dettaglio sono descritti nello standard CityGML 2.0.
Edificio livello 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
è costituito da impronte di edifici estruse verso l'alto fino a formare una parte superiore piana. L'altezza degli edifici potrebbe non essere precisa.
Edificio livello 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
avrà una geometria con fedeltà più alta. Le pareti e i tetti mesh si adatteranno meglio alla forma dell'edificio. Elementi più piccoli come camini o prese d'aria sul tetto potrebbero comunque penetrare all'esterno della rete.
Informazioni su Mesh
Mesh
è una mesh poligonale che rappresenta una ricostruzione della superficie della geometria della strada.
Ogni Mesh
include un buffer di vertici e un buffer di indici:
Mesh.getVertexListSize()
Recupera il numero di vertici in questa mesh.Mesh.getVertexList()
Ottenere le posizioni concatenate dei vertici della mesh, in coordinate relative aStreetscapeGeometry.getMeshPose()
.Mesh.getIndexListSize()
Recupera il numero di indici in questa mesh.Mesh.getIndexList()
Recupera gli indici dei vertici che compongono una faccia.
Allegare contenuti AR a una StreetscapeGeometry
Esistono due modi per allegare contenuti AR a Streetscape Geometry:
- Attiva Profondità geospaziale e utilizza un hit test di profondità. Questo è il metodo consigliato e più semplice.
- Utilizza
Trackable.createAnchor()
per creare un ancoraggio in una determinata posizione associata a unStreetscapeGeometry
. Questo ancoraggio erediterà il proprio stato di monitoraggio dall'elemento principaleStreetscapeGeometry
.
Esegui un test di corrispondenza su StreetscapeGeometry
Frame.hitTest()
può essere utilizzato per eseguire un test di hit rispetto alla geometria di Streetscape. Se vengono individuati degli incroci, HitResult
contiene informazioni sulla posa in relazione alla posizione dell'hit, nonché un riferimento alla StreetscapeGeometry
che è stata rilevata. La geometria di Streetscape può essere passata a Trackable.createAnchor()
per creare un ancoraggio collegato.
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) } }
Attiva profondità geospaziale
La profondità geospaziale combina la geometria di paesaggi urbani con input dei sensori locali per migliorare i dati sulla profondità. Quando la funzionalità Profondità geospaziale è attivata, le immagini di profondità di output e di profondità non elaborate vengono modificate per includere la geometria di Streetscape rasterizzata oltre alla profondità osservata localmente. Ciò può migliorare la precisione delle pose usando la profondità.