Die Streetscape Geometry APIs liefern die Geometrie von Gelände, Gebäuden oder anderen Strukturen in einer Szene. Die Geometrie kann für die Okklusion, das Rendering oder das Platzieren von AR-Inhalten über Hit-Test-APIs verwendet werden. Daten zur Straßenraumgeometrie werden aus Google Street View-Bildern gewonnen.
Beispiel testen
In der GeospatialExample App wird veranschaulicht, wie Sie Straßenansichten-Geometrien abrufen und rendern.
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 die Geospatial API einzurichten.
Geometrie für Straßenzüge aktivieren
Die Geospatial API ruft Daten zur Straßengeometrie ab, wenn GARGeospatialMode
auf GARGeospatialModeEnabled
und GARStreetscapeGeometryMode
auf GARStreetscapeGeometryModeEnabled
festgelegt ist.
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];
Street View-Geometrie in einer ARCore-Sitzung abrufen
MitGARFrame.streetscapeGeometries
können Sie alle GARStreetscapeGeometry
-Objekte abrufen.
GARStreetscapeGeometry
GARStreetscapeGeometry
enthält Informationen zu einem Gebäude:
-
GARStreetscapeGeometry.type
Gibt an, ob die StreetscapeGeometry als Gelände oder Gebäude gekennzeichnet ist. -
GARStreetscapeGeometry.mesh
Ermitteln Sie ein PolygonGARMesh
, das diesem Gelände oder Gebäude entspricht. -
GARStreetscapeGeometry.meshTransform
Beschreibt den Ursprung der Geometrie. Alle Punkte in derGARMesh
sollten mitGARStreetscapeGeometry.meshTransform
transformiert werden. -
GARStreetscapeGeometry.quality
Gibt die Qualität der Mesh-Daten an. Detailebenen werden im CityGML 2.0-Standard beschrieben.
Gebäude – LOD 1
GARStreetscapeGeometryQualityBuildingLOD_1
besteht aus Gebäudegrundrissen, die nach oben zu einer flachen Oberseite extrudiert werden. Gebäudehöhen können ungenau sein.
Gebäude-LOD 2
GARStreetscapeGeometryQualityBuildingLOD_2
hat eine höhere Geometrietreue. Mesh-Wände und -Dächer entsprechen der Form des Gebäudes besser. Kleinere Elemente wie Schornsteine oder Dachlüftungsöffnungen können noch über das Mesh hinausragen.
GARMesh
GARMesh
ist ein Polygon-Mesh, das eine Oberflächenrekonstruktion der Straßengeometrie darstellt.
Jede GARMesh
enthält einen Vertex- und einen Index-Buffer:
GARMesh.vertexCount
Ruft die Anzahl der Eckpunkte in diesem Mesh ab.GARMesh.vertices
Die zusammenhängenden Positionen der Mesh-Eckpunkte in Koordinaten relativ zuGARStreetscapeGeometry.meshTransform
abrufen.GARMesh.triangleCount
Ruft die Anzahl der Indexe in diesem Mesh ab.GARMesh.triangles
Indexe der Eckpunkte abrufen, die ein Gesicht bilden.
AR-Inhalte an eine GARStreetscapeGeometry
anhängen
Verwenden Sie GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
, um einen Anker in einer bestimmten Pose in der Nähe von GARStreetscapeGeometry.meshTransform
zu erstellen. Der Tracking-Status dieses Ankers wird vom übergeordneten Element GARStreetscapeGeometry
übernommen.
Führen Sie einen Treffertest für GARStreetscapeGeometry
durch.
GARSession.raycastStreetscapeGeometry:direction:error:
kann für einen Treffertest mit der Straßenraumgeometrie verwendet werden. Wenn Überschneidungen gefunden werden, enthält GARStreetscapeGeometryRaycastResult
Informationen zur Pose am Auftreffpunkt sowie einen Verweis auf die GARStreetscapeGeometry
, die getroffen wurde. Diese Straßenansichtsgeometrie kann an GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
übergeben werden, um einen daran angehängten 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];