Le API Streetscape Geometry forniscono la geometria di terreni, edifici o altre strutture in una scena. La geometria può essere utilizzata per occlusione, rendering o posizionamento di contenuti AR tramite API hit-test. I dati della geometria di Streetscape sono ottenuti tramite le immagini di Google Street View.
Prova l'esempio
L'app GeospatialExample mostra come ottenere ed eseguire il rendering delle 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 di Streetscape
L'API Geospatial ottiene i dati di Streetscape Geometry quando GARGeospatialMode
è impostato su GARGeospatialModeEnabled
e GARStreetscapeGeometryMode
è impostato su GARStreetscapeGeometryModeEnabled
.
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];
Ottenere la geometria Streetscape in una sessione ARCore
UsaGARFrame.streetscapeGeometries
per ottenere tutti gli oggetti GARStreetscapeGeometry
.
Informazioni su GARStreetscapeGeometry
GARStreetscapeGeometry
contiene informazioni su un edificio:
-
GARStreetscapeGeometry.type
Identifica StreetscapeGeometry come terreno o un edificio. -
GARStreetscapeGeometry.mesh
Crea un poligonoGARMesh
corrispondente al terreno o all'edificio in questione. -
GARStreetscapeGeometry.meshTransform
Descrive l'origine della geometria. Tutti i punti inGARMesh
devono essere trasformati daGARStreetscapeGeometry.meshTransform
. -
GARStreetscapeGeometry.quality
Fornisce la qualità dei dati mesh. I livelli di dettaglio sono descritti nello standard CityGML 2.0.
Edificio livello 1
GARStreetscapeGeometryQualityBuildingLOD_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
GARStreetscapeGeometryQualityBuildingLOD_2
avrà una geometria con fedeltà più alta. Le pareti e i tetti in retina si adattano 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 GARMesh
GARMesh
è una rete poligonale che rappresenta una ricostruzione della superficie della geometria di Street View.
Ogni GARMesh
include un buffer di vertex e un buffer di indice:
GARMesh.vertexCount
Recupera il numero di vertici in questa mesh.GARMesh.vertices
Ottenere le posizioni concatenate dei vertici della mesh, in coordinate relative aGARStreetscapeGeometry.meshTransform
.GARMesh.triangleCount
Recupera il numero di indici in questa mesh.GARMesh.triangles
Recupera gli indici dei vertici che compongono una faccia.
Allegare contenuti AR a una GARStreetscapeGeometry
Utilizza GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
per creare un ancoraggio in una determinata posizione vicino a GARStreetscapeGeometry.meshTransform
. Questo ancoraggio erediterà il proprio stato di monitoraggio dall'elemento principale GARStreetscapeGeometry
.
Eseguire un hit-test contro GARStreetscapeGeometry
GARSession.raycastStreetscapeGeometry:direction:error:
può essere utilizzato per eseguire un test di hit rispetto alla geometria di Streetscape. Se vengono individuati degli incroci, GARStreetscapeGeometryRaycastResult
contiene informazioni sulla posa relativamente alla posizione dell'hit, oltre a un riferimento alla GARStreetscapeGeometry
che è stata rilevata. La geometria di Streetscape può essere passata a GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
per creare un ancoraggio collegato.
NSArray<GARStreetscapeGeometryRaycastResult *> *results =
[session raycastStreetscapeGeometry:arRaycastQuery.origin
direction:arRaycastQuery.direction
error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
transform:results[0].worldTransform
error:&error];