在 iOS 设备上使用周围的建筑物和地形
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
Streetscape Geometry API 提供场景中地形、建筑物或其他结构的几何图形。该几何图形可用于通过碰撞检测 API 进行遮挡、渲染或放置 AR 内容。街景几何图形数据是通过 Google 街景图像获取的。
试用示例
GeospatialExample 应用演示了如何获取和渲染街景几何图形。
设置 Geospatial API
如需使用街景几何图形,您需要在项目中设置 Geospatial API。
按照启用 Geospatial API 中的说明设置 Geospatial API。
启用街景几何图形
当 GARGeospatialMode
设置为 GARGeospatialModeEnabled
且 GARStreetscapeGeometryMode
设置为 GARStreetscapeGeometryModeEnabled
时,Geospatial API 会获取街景几何图形数据。
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];
在 ARCore 会话中获取街景几何图形
使用
GARFrame.streetscapeGeometries
获取所有
GARStreetscapeGeometry
对象。
GARStreetscapeGeometry
包含建筑物相关信息:
建筑物 LOD 1
GARStreetscapeGeometryQualityBuildingLOD_1
由向上延伸到平顶的建筑物平面图组成。建筑物高度可能不准确。

构建 LOD 2
GARStreetscapeGeometryQualityBuildingLOD_2
将具有更高的几何保真度。网格墙和屋顶将更贴近建筑物的形状。烟囱或屋顶通风口等较小的建筑物特征可能仍会超出网格范围。

GARMesh
是一个多边形网格,表示街景几何图形的表面重建。
每个 GARMesh
都包含一个顶点缓冲区和一个索引缓冲区:
使用
GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
在
GARStreetscapeGeometry.meshTransform
附近的给定姿势处创建锚点。此锚点将从父级
GARStreetscapeGeometry
继承其跟踪状态。
GARSession.raycastStreetscapeGeometry:direction:error:
可用于对街景几何图形执行点击测试。如果找到了交叉点,GARStreetscapeGeometryRaycastResult
将包含与命中位置相关的姿势信息,以及对命中的 GARStreetscapeGeometry
的引用。此 Streetscape Geometry 可以传递给 GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
,以创建与其关联的锚点。
NSArray<GARStreetscapeGeometryRaycastResult *> *results =
[session raycastStreetscapeGeometry:arRaycastQuery.origin
direction:arRaycastQuery.direction
error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
transform:results[0].worldTransform
error:&error];
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-07-26。
[null,null,["最后更新时间 (UTC):2025-07-26。"],[[["\u003cp\u003eThe Streetscape Geometry APIs use Google Street View data to provide 3D geometry of terrain and buildings for use in AR experiences.\u003c/p\u003e\n"],["\u003cp\u003eEnable the Geospatial and Streetscape Geometry modes in your ARCore session configuration to access this data.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eGARStreetscapeGeometry\u003c/code\u003e objects represent terrain or buildings, providing mesh data and quality information for rendering.\u003c/p\u003e\n"],["\u003cp\u003eYou can attach AR content to Streetscape Geometry using anchors, ensuring the content is anchored to real-world structures.\u003c/p\u003e\n"],["\u003cp\u003eHit-testing against Streetscape Geometry allows you to interact with and place AR objects on real-world surfaces represented by the geometry.\u003c/p\u003e\n"]]],[],null,["# Use buildings and terrain around you on iOS\n\nThe Streetscape Geometry APIs provide the geometry of terrain, buildings, or other structures in a scene. The geometry can be used for occlusion, rendering, or placing AR content via hit-test APIs. Streetscape Geometry data is obtained through Google Street View imagery.\n\nTry the sample\n--------------\n\nThe [GeospatialExample app](https://github.com/google-ar/arcore-ios-sdk/tree/master/Examples/GeospatialExample) demonstrates how to obtain and render Streetscape Geometries.\n\nSet up the Geospatial API\n-------------------------\n\nTo use Streetscape Geometry, you'll need to set up the Geospatial API in your project.\nFollow instructions on [Enabling the Geospatial API](/ar/develop/ios/geospatial/enable) to set up the Geospatial API.\n\nEnable Streetscape Geometry\n---------------------------\n\nThe Geospatial API obtains Streetscape Geometry data when the [`GARGeospatialMode`](/ar/reference/ios/group/GARGeospatialMode) is set to [`GARGeospatialModeEnabled`](/ar/reference/ios/group/GARGeospatialMode#gargeospatialmodeenabled) and [`GARStreetscapeGeometryMode`](/ar/reference/ios/group/GARStreetscapeGeometryMode) is set to [`GARStreetscapeGeometryModeEnabled`](/ar/reference/ios/group/GARStreetscapeGeometryMode#garstreetscapegeometrymodeenabled). \n\n GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];\n configuration.geospatialMode = GARGeospatialModeEnabled;\n configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;\n [garSession setConfiguration:configuration error:&error];\n\nObtain Streetscape Geometry in an ARCore session\n------------------------------------------------\n\nUse [`GARFrame.streetscapeGeometries`](/ar/reference/ios/category/GARFrame(Geospatial)#streetscapegeometries) to obtain all [`GARStreetscapeGeometry`](/ar/reference/ios/interface/GARStreetscapeGeometry) objects.\n\n\u003cbr /\u003e\n\nUnderstand [`GARStreetscapeGeometry`](/ar/reference/ios/interface/GARStreetscapeGeometry)\n-----------------------------------------------------------------------------------------\n\n[`GARStreetscapeGeometry`](/ar/reference/ios/interface/GARStreetscapeGeometry) contains information about a building:\n\n- [`GARStreetscapeGeometry.type`](/ar/reference/ios/interface/GARStreetscapeGeometry#type) \n Identifies the StreetscapeGeometry as either terrain or a building.\n- [`GARStreetscapeGeometry.mesh`](/ar/reference/ios/interface/GARStreetscapeGeometry#mesh) \n Obtain a polygon [`GARMesh`](/ar/reference/ios/interface/GARMesh) that corresponds to this terrain or building.\n- [`GARStreetscapeGeometry.meshTransform`](/ar/reference/ios/interface/GARStreetscapeGeometry#meshtransform) \n Describes the origin of the geometry. All points in the [`GARMesh`](/ar/reference/ios/interface/GARMesh) should be transformed by [`GARStreetscapeGeometry.meshTransform`](/ar/reference/ios/interface/GARStreetscapeGeometry#meshtransform).\n- [`GARStreetscapeGeometry.quality`](/ar/reference/ios/interface/GARStreetscapeGeometry#quality) \n Provides the quality of the mesh data. Levels of detail are described in the [CityGML 2.0 standard](https://portal.ogc.org/files/?artifact_id=16675).\n\n### Building LOD 1\n\n[`GARStreetscapeGeometryQualityBuildingLOD_1`](/ar/reference/ios/group/GARStreetscapeGeometryQuality#garstreetscapegeometryqualitybuildinglod_1) consists of building footprints extruded upwards to a flat top. Building heights may be inaccurate.\n\n### Building LOD 2\n\n[`GARStreetscapeGeometryQualityBuildingLOD_2`](/ar/reference/ios/group/GARStreetscapeGeometryQuality#garstreetscapegeometryqualitybuildinglod_2) will have higher fidelity geometry. Mesh walls and roofs will more closely match the building's shape. Smaller features like chimneys or roof vents may still poke outside of the mesh.\n\nUnderstand [`GARMesh`](/ar/reference/ios/interface/GARMesh)\n-----------------------------------------------------------\n\n[`GARMesh`](/ar/reference/ios/interface/GARMesh) is a polygon mesh representing a surface reconstruction of the Streetscape Geometry.\n\nEach [`GARMesh`](/ar/reference/ios/interface/GARMesh) includes a vertex buffer and index buffer:\n\n- [`GARMesh.vertexCount`](/ar/reference/ios/interface/GARMesh#vertexcount) \n Retrieves the number of vertices in this mesh.\n- [`GARMesh.vertices`](/ar/reference/ios/interface/GARMesh#vertices) \n Obtain the concatenated positions of mesh vertices, in coordinates relative to [`GARStreetscapeGeometry.meshTransform`](/ar/reference/ios/interface/GARStreetscapeGeometry#meshtransform).\n- [`GARMesh.triangleCount`](/ar/reference/ios/interface/GARMesh#trianglecount) \n Retrieves the number of indices in this mesh.\n- [`GARMesh.triangles`](/ar/reference/ios/interface/GARMesh#triangles) \n Obtain the indexes of vertices that make up a face.\n\nAttach AR content to a [`GARStreetscapeGeometry`](/ar/reference/ios/interface/GARStreetscapeGeometry)\n-----------------------------------------------------------------------------------------------------\n\nUse [`GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:`](/ar/reference/ios/category/GARSession(Geospatial)#createanchoronstreetscapegeometry:transform:error:) to create an anchor at a given pose near [`GARStreetscapeGeometry.meshTransform`](/ar/reference/ios/interface/GARStreetscapeGeometry#meshtransform). This anchor will inherit its tracking state from the parent [`GARStreetscapeGeometry`](/ar/reference/ios/interface/GARStreetscapeGeometry).\n\n\u003cbr /\u003e\n\n### Perform a hit-test against [`GARStreetscapeGeometry`](/ar/reference/ios/interface/GARStreetscapeGeometry)\n\n[`GARSession.raycastStreetscapeGeometry:direction:error:`](/ar/reference/ios/category/GARSession(Geospatial)#raycaststreetscapegeometry:direction:error:) can be used to hit-test against Streetscape Geometry. If intersections are found, [`GARStreetscapeGeometryRaycastResult`](/ar/reference/ios/interface/GARStreetscapeGeometryRaycastResult) contains pose information about the hit location as well as a reference to the [`GARStreetscapeGeometry`](/ar/reference/ios/interface/GARStreetscapeGeometry) which was hit. This Streetscape Geometry can be passed to [`GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:`](/ar/reference/ios/category/GARSession(Geospatial)#createanchoronstreetscapegeometry:transform:error:) to create an anchor attached to it. \n\n NSArray\u003cGARStreetscapeGeometryRaycastResult *\u003e *results =\n [session raycastStreetscapeGeometry:arRaycastQuery.origin\n direction:arRaycastQuery.direction\n error:&error];\n [session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry\n transform:results[0].worldTransform\n error:&error];"]]