Le API Streetscape Geometry forniscono la geometria del terreno, degli edifici o di altre strutture in una scena. La geometria può essere utilizzata per l'occlusione, il rendering o il posizionamento di contenuti AR tramite API di hit-test. I dati di Streetscape Geometry vengono ottenuti tramite le immagini di Google Street View.
Prova il Sample
L'app di esempio geospatial_java mostra come ottenere e visualizzare le geometrie di Streetscape.
Configurare l'API Geospatial
Per utilizzare la geometria di Streetscape, devi configurare l'API Geospatial nel tuo progetto. Segui le istruzioni per abilitare l'API Geospatial per configurare l'API Geospatial.
Attiva la geometria di Streetscape
L'API Geospatial ottiene i dati di geometria della strada 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
UsaSession.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()
Ottieni un poligonoMesh
che corrisponda a questo terreno o edificio. -
StreetscapeGeometry.getMeshPose()
Descrive l'origine della geometria. Tutti i punti inMesh
devono essere trasformati daStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Fornisce la qualità dei dati della 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 una sommità piana. Le altezze degli edifici potrebbero non essere precise.
LOD dell'edificio 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
avrà una geometria con una fedeltà superiore. 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 sporgere all'esterno della maglia.
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()
Recupero il numero di vertici in questo mesh.Mesh.getVertexList()
Ottieni le posizioni concatenate dei vertici mesh, in coordinate relative aStreetscapeGeometry.getMeshPose()
.Mesh.getIndexListSize()
Recupero il numero di indici in questo mesh.Mesh.getIndexList()
Ottieni gli indici dei vertici che compongono un lato.
Allegare contenuti AR a una StreetscapeGeometry
Esistono due modi per collegare i contenuti AR alla geometria di Streetscape:
- Attiva la profondità geospaziale e utilizza un test di corrispondenza della 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
.
Eseguire un hit-test contro StreetscapeGeometry
Frame.hitTest()
può essere utilizzato per eseguire test di corrispondenza rispetto alla geometria della strada. Se vengono trovate intersezioni, HitResult
contiene informazioni sulla posizione dell'impatto e un riferimento all'StreetscapeGeometry
colpito. 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) } }
Attivare la profondità geospaziale
La funzionalità Profondità geospaziale combina la geometria della strada con l'input dei sensori locali per migliorare i dati sulla profondità. Quando la profondità geospaziale è attivata, le immagini di profondità in uscita e di profondità non elaborata vengono modificate per includere la geometria della strada rasterizzata oltre alla profondità osservata localmente. Ciò può migliorare la precisione delle pose usando la profondità.