Die Streetscape Geometry APIs liefern die Geometrie von Gelände, Gebäuden oder anderen Strukturen in einer Szene. Die Geometrie kann zum Verdecken, Rendern oder Platzieren von AR-Inhalten über Treffertest-APIs verwendet werden. Die Geometriedaten für Streetscape werden über Google Street View-Bilder abgerufen.
Beispiel ausprobieren
Mit der GeospatialExample App wird gezeigt, wie Streetscape-Geometrien abgerufen und gerendert werden.
Geospatial API einrichten
Wenn Sie Streetscape-Geometrie verwenden möchten, müssen Sie die Geospatial API in Ihrem Projekt einrichten. Folgen Sie der Anleitung unter Geospatial API aktivieren, um sie einzurichten.
Streetscape-Geometrie aktivieren
Die Geospatial API ruft Streetscape-Geometriedaten 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.
GARStreetscapeGeometry
verstehen
GARStreetscapeGeometry
enthält Informationen zu einem Gebäude:
-
GARStreetscapeGeometry.type
Identifiziert StreetscapeGeometry entweder als Gelände oder als Gebäude. -
GARStreetscapeGeometry.mesh
Fordern Sie ein PolygonGARMesh
an, das dem Gelände oder Gebäude entspricht. -
GARStreetscapeGeometry.meshTransform
Beschreibt den Ursprung der Geometrie. Alle Punkte imGARMesh
sollten durchGARStreetscapeGeometry.meshTransform
umgewandelt werden. -
GARStreetscapeGeometry.quality
Stellt die Qualität der Mesh-Daten bereit. Die Detailebenen werden im CityGML 2.0-Standard beschrieben.
LOD 1 erstellen
GARStreetscapeGeometryQualityBuildingLOD_1
besteht aus Gebäuden, die nach oben auf eine flache Oberfläche extrudiert werden. Gebäudehöhen können ungenau sein.
LOD 2 erstellen
GARStreetscapeGeometryQualityBuildingLOD_2
weist eine höhere Geometrie auf. Gitterwände und Dächer passen sich besser an die Form des Gebäudes an. Auch kleinere Elemente wie Schornsteine oder Lüftungsöffnungen können aus dem Gitter herausragen.
GARMesh
verstehen
GARMesh
ist ein Polygonnetz, das eine Oberflächenrekonstruktion der Streetscape-Geometrie darstellt.
Jedes GARMesh
enthält einen Vertex-Zwischenspeicher und einen Indexzwischenspeicher:
GARMesh.vertexCount
Ruft die Anzahl der Eckpunkte in diesem Mesh-Netzwerk ab.GARMesh.vertices
Rufen Sie die verketteten Positionen von Netzeckpunkten in Koordinaten relativ zuGARStreetscapeGeometry.meshTransform
ab.GARMesh.triangleCount
Ruft die Anzahl der Indexe in diesem Mesh-Netzwerk ab.GARMesh.triangles
Indexe der Eckpunkte abrufen, aus denen ein Gesicht besteht.
AR-Inhalte an GARStreetscapeGeometry
anhängen
Erstellen Sie mit GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
einen Anker bei einer bestimmten Position in der Nähe von GARStreetscapeGeometry.meshTransform
. Dieser Anker übernimmt den Tracking-Status vom übergeordneten GARStreetscapeGeometry
.
Treffertest für GARStreetscapeGeometry
durchführen
GARSession.raycastStreetscapeGeometry:direction:error:
kann für Treffertests mit Streetscape-Geometriedaten verwendet werden. Wenn Kreuzungen gefunden werden, enthält GARStreetscapeGeometryRaycastResult
Poseninformationen zur Trefferposition sowie einen Verweis auf das GARStreetscapeGeometry
, für das der Treffer getroffen wurde. Diese Streetscape-Geometrie kann an GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
übergeben werden, um einen Anker hinzuzufügen.
NSArray<GARStreetscapeGeometryRaycastResult *> *results =
[session raycastStreetscapeGeometry:arRaycastQuery.origin
direction:arRaycastQuery.direction
error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
transform:results[0].worldTransform
error:&error];