Die Streetscape Geometry APIs stellen die Geometrie von Gelände, Gebäuden oder anderen Strukturen in einer Szene zur Verfügung. Die Geometrie kann zum Verdecken, Rendern oder Platzieren von AR-Inhalten über Hit-Test-APIs verwendet werden. Die Geometriedaten für Streetscape werden über Google Street View-Bilder abgerufen.
Beispiel ausprobieren
Die GeospatialExample App zeigt, wie Streetscape-Geometrien abgerufen und gerendert werden.
Geospatial API einrichten
Wenn Sie Streetscape Geometry verwenden möchten, müssen Sie die Geospatial API in Ihrem Projekt einrichten. Folgen Sie der Anleitung unter Geospatial API aktivieren, um die Geospatial API einzurichten.
Streetscape-Geometrie aktivieren
Die Geospatial API ruft Streetscape Geometry-Daten ab, wenn GARGeospatialMode
auf GARGeospatialModeEnabled
und GARStreetscapeGeometryMode
auf GARStreetscapeGeometryModeEnabled
gesetzt ist.
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];
Streetscape-Geometrie in einer ARCore-Sitzung abrufen
Verwenden SieGARFrame.streetscapeGeometries
, um alle GARStreetscapeGeometry
-Objekte abzurufen.
Informationen zu GARStreetscapeGeometry
GARStreetscapeGeometry
enthält Informationen zu einem Gebäude:
-
GARStreetscapeGeometry.type
Kennzeichnet die StreetscapeGeometry entweder als Gelände oder als Gebäude. -
GARStreetscapeGeometry.mesh
Erstellen Sie ein PolygonGARMesh
, das diesem Gelände oder Gebäude entspricht. -
GARStreetscapeGeometry.meshTransform
Beschreibt den Ursprung der Geometrie. Alle Punkte imGARMesh
sollten durchGARStreetscapeGeometry.meshTransform
transformiert werden. -
GARStreetscapeGeometry.quality
Liefert die Qualität der Mesh-Daten. Die Detailebenen werden im CityGML 2.0-Standard beschrieben.
LOD 1 wird erstellt
GARStreetscapeGeometryQualityBuildingLOD_1
besteht aus Gebäudegrundrissen, die nach oben zu einer flachen Oberseite extrudiert sind. Die Gebäudehöhen können ungenau sein.
LOD 2 wird erstellt
GARStreetscapeGeometryQualityBuildingLOD_2
hat eine höhere Geometrie. Gitterwände und -dächer passen sich der Form des Gebäudes besser an. Kleinere Elemente wie Schornsteine oder Dachlüfter führen möglicherweise noch außerhalb des Netzes.
Informationen zu GARMesh
GARMesh
ist ein Polygonnetz, das eine Rekonstruktion der Oberfläche der Streetscape-Geometrie darstellt.
Jedes GARMesh
enthält einen Scheitelpunktzwischenspeicher und einen Indexzwischenspeicher:
GARMesh.vertexCount
Ruft die Anzahl der Eckpunkte in diesem Mesh-Netzwerk ab.GARMesh.vertices
Die verketteten Positionen von Mesh-Scheitelpunkten in Koordinaten relativ zuGARStreetscapeGeometry.meshTransform
GARMesh.triangleCount
Ruft die Anzahl der Indexe in diesem Mesh-Netzwerk ab.GARMesh.triangles
Ermitteln Sie die Indexe der Eckpunkte, aus denen eine Fläche besteht.
AR-Inhalte an ein GARStreetscapeGeometry
anhängen
Verwenden Sie GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
, um einen Anker an einer bestimmten Position in der Nähe von GARStreetscapeGeometry.meshTransform
zu erstellen. Dieser Anker übernimmt seinen Tracking-Status vom übergeordneten Element GARStreetscapeGeometry
.
Treffertest für GARStreetscapeGeometry
durchführen
GARSession.raycastStreetscapeGeometry:direction:error:
kann für Treffertests für die Streetscape-Geometrie verwendet werden. Wenn Kreuzungen gefunden werden, enthält GARStreetscapeGeometryRaycastResult
Positionsinformationen zur Trefferposition sowie einen Verweis auf das GARStreetscapeGeometry
-Element, das getroffen wurde. Diese Streetscape-Geometrie kann an GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
übergeben werden, um einen Anker zu erstellen.
NSArray<GARStreetscapeGeometryRaycastResult *> *results =
[session raycastStreetscapeGeometry:arRaycastQuery.origin
direction:arRaycastQuery.direction
error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
transform:results[0].worldTransform
error:&error];