在 Android SDK (Kotlin/Java) 中使用周围的建筑物和地形
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
Streetscape Geometry API 提供场景中地形、建筑物或其他结构的几何图形。该几何图形可用于通过碰撞检测 API 进行遮挡、渲染或放置 AR 内容。街景几何图形数据是通过 Google 街景图像获取的。
试用示例
geospatial_java 示例应用演示了如何获取和渲染街景几何图形。
设置 Geospatial API
如需使用街景几何图形,您需要在项目中设置 Geospatial API。
按照启用 Geospatial API 中的说明设置 Geospatial API。
启用街景几何图形
当 GeospatialMode
设置为 GeospatialMode.ENABLED
且 StreetscapeGeometryMode
设置为 StreetscapeGeometryMode.ENABLED
时,Geospatial API 会获取街景几何图形数据。
Java
Config config = session.getConfig();
// Streetscape Geometry requires the Geospatial API to be enabled.
config.setGeospatialMode(Config.GeospatialMode.ENABLED);
// Enable Streetscape Geometry.
config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED);
session.configure(config);
Kotlin
session.configure(
session.config.apply {
// Streetscape Geometry requires the Geospatial API to be enabled.
geospatialMode = Config.GeospatialMode.ENABLED
// Enable Streetscape Geometry.
streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
}
)
在 ARCore 会话中获取街景几何图形
使用
Session.getAllTrackables()
和
StreetscapeGeometry.class
过滤结果。
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
StreetscapeGeometry
包含建筑物相关信息:
建筑物 LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
由向上延伸到平顶的建筑物平面图组成。建筑物高度可能不准确。

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

Mesh
是一个多边形网格,表示街景几何图形的表面重建。
每个 Mesh
都包含一个顶点缓冲区和一个索引缓冲区:
您可以通过以下两种方式将 AR 内容附加到街景几何图形:
Frame.hitTest()
可用于对街景几何图形执行点击测试。如果找到了交叉点,HitResult
将包含与命中位置相关的姿势信息,以及对命中的 StreetscapeGeometry
的引用。此 Streetscape Geometry 可以传递给 Trackable.createAnchor()
,以创建与其关联的锚点。
Java
for (HitResult hit : frame.hitTest(singleTapEvent)) {
if (hit.getTrackable() instanceof StreetscapeGeometry) {
Pose hitPose = hit.getHitPose();
hit.getTrackable().createAnchor(hitPose);
}
}
Kotlin
for (hit in frame.hitTest(singleTapEvent)) {
if (hit.trackable is StreetscapeGeometry) {
val hitPose = hit.hitPose
hit.trackable.createAnchor(hitPose)
}
}
启用地理深度
Geospatial Depth 将 Streetscape Geometry 与本地传感器输入相结合,以增强深度数据。启用 Geospatial Depth 后,输出深度和原始深度图片会被修改,以包含光栅化街景几何图形以及本地观察到的深度。这可能会提高使用深度数据估算姿势的准确性。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-07-26。
[null,null,["最后更新时间 (UTC):2025-07-26。"],[[["\u003cp\u003eThe Streetscape Geometry APIs utilize Google Street View data to provide 3D geometry of terrain and buildings for use in AR experiences.\u003c/p\u003e\n"],["\u003cp\u003eDevelopers need to enable both the Geospatial API and Streetscape Geometry mode in their ARCore session configuration.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eStreetscapeGeometry\u003c/code\u003e objects contain mesh data, pose information, and quality level for representing the geometry.\u003c/p\u003e\n"],["\u003cp\u003eAR content can be attached to Streetscape Geometry using Geospatial Depth hit-tests or by creating anchors directly on the geometry.\u003c/p\u003e\n"],["\u003cp\u003eGeospatial Depth enhances depth data by combining Streetscape Geometry with sensor input, potentially improving pose accuracy.\u003c/p\u003e\n"]]],[],null,["# Use buildings and terrain around you on Android SDK (Kotlin/Java)\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 [geospatial_java sample app](https://github.com/google-ar/arcore-android-sdk/tree/master/samples/geospatial_java) 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/java/geospatial/enable) to set up the Geospatial API.\n\nEnable Streetscape Geometry\n---------------------------\n\nThe Geospatial API obtains Streetscape Geometry data when the [`GeospatialMode`](/ar/reference/java/com/google/ar/core/Config.GeospatialMode) is set to [`GeospatialMode.ENABLED`](/ar/reference/java/com/google/ar/core/Config.GeospatialMode#ENABLED) and [`StreetscapeGeometryMode`](/ar/reference/java/com/google/ar/core/Config.StreetscapeGeometryMode) is set to [`StreetscapeGeometryMode.ENABLED`](/ar/reference/java/com/google/ar/core/Config.StreetscapeGeometryMode#ENABLED). \n\n### Java\n\n```java\nConfig config = session.getConfig();\n// Streetscape Geometry requires the Geospatial API to be enabled.\nconfig.setGeospatialMode(Config.GeospatialMode.ENABLED);\n// Enable Streetscape Geometry.\nconfig.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED);\nsession.configure(config);\n```\n\n### Kotlin\n\n```kotlin\nsession.configure(\n session.config.apply {\n // Streetscape Geometry requires the Geospatial API to be enabled.\n geospatialMode = Config.GeospatialMode.ENABLED\n // Enable Streetscape Geometry.\n streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED\n }\n)\n```\n\nObtain Streetscape Geometry in an ARCore session\n------------------------------------------------\n\nUse [`Session.getAllTrackables()`](/ar/reference/java/com/google/ar/core/Session#getAllTrackables-filterType) and use [`StreetscapeGeometry.class`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry) to filter results.\n\n\u003cbr /\u003e\n\n### Java\n\n```java\nsession.getAllTrackables(StreetscapeGeometry.class);\n```\n\n### Kotlin\n\n```kotlin\nsession.getAllTrackables(StreetscapeGeometry::class.java)\n```\n\nUnderstand [`StreetscapeGeometry`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry)\n---------------------------------------------------------------------------------------------\n\n[`StreetscapeGeometry`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry) contains information about a building:\n\n- [`StreetscapeGeometry.getType()`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry#getType-) \n Identifies the StreetscapeGeometry as either terrain or a building.\n- [`StreetscapeGeometry.getMesh()`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry#getMesh-) \n Obtain a polygon [`Mesh`](/ar/reference/java/com/google/ar/core/Mesh) that corresponds to this terrain or building.\n- [`StreetscapeGeometry.getMeshPose()`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry#getMeshPose-) \n Describes the origin of the geometry. All points in the [`Mesh`](/ar/reference/java/com/google/ar/core/Mesh) should be transformed by [`StreetscapeGeometry.getMeshPose()`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry#getMeshPose-).\n- [`StreetscapeGeometry.getQuality()`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry#getQuality-) \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[`StreetscapeGeometry.Quality.BUILDING_LOD_1`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry.Quality#building_lod_1) consists of building footprints extruded upwards to a flat top. Building heights may be inaccurate.\n\n### Building LOD 2\n\n[`StreetscapeGeometry.Quality.BUILDING_LOD_2`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry.Quality#building_lod_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 [`Mesh`](/ar/reference/java/com/google/ar/core/Mesh)\n---------------------------------------------------------------\n\n[`Mesh`](/ar/reference/java/com/google/ar/core/Mesh) is a polygon mesh representing a surface reconstruction of the Streetscape Geometry.\n\nEach [`Mesh`](/ar/reference/java/com/google/ar/core/Mesh) includes a vertex buffer and index buffer:\n\n- [`Mesh.getVertexListSize()`](/ar/reference/java/com/google/ar/core/Mesh#getVertexListSize-) \n Retrieves the number of vertices in this mesh.\n- [`Mesh.getVertexList()`](/ar/reference/java/com/google/ar/core/Mesh#getVertexList-) \n Obtain the concatenated positions of mesh vertices, in coordinates relative to [`StreetscapeGeometry.getMeshPose()`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry#getMeshPose-).\n- [`Mesh.getIndexListSize()`](/ar/reference/java/com/google/ar/core/Mesh#getIndexListSize-) \n Retrieves the number of indices in this mesh.\n- [`Mesh.getIndexList()`](/ar/reference/java/com/google/ar/core/Mesh#getIndexList-) \n Obtain the indexes of vertices that make up a face.\n\nAttach AR content to a [`StreetscapeGeometry`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry)\n---------------------------------------------------------------------------------------------------------\n\nThere are two ways to attach AR content to Streetscape Geometry:\n\n\u003cbr /\u003e\n\n- Enable [Geospatial Depth](/ar/develop/java/depth/geospatial-depth) and use a [Depth hit-test](/ar/develop/java/depth/developer-guide#depth_hit-test). This is the recommended and easier method.\n- Use [`Trackable.createAnchor()`](/ar/reference/java/com/google/ar/core/Trackable#createAnchor-pose) to create an anchor at a given pose attached to a [`StreetscapeGeometry`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry). This anchor will inherit its tracking state from the parent [`StreetscapeGeometry`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry).\n\n### Perform a hit-test against [`StreetscapeGeometry`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry)\n\n[`Frame.hitTest()`](/ar/reference/java/com/google/ar/core/Frame#hitTest-motionEvent) can be used to hit-test against Streetscape Geometry. If intersections are found, [`HitResult`](/ar/reference/java/com/google/ar/core/HitResult) contains pose information about the hit location as well as a reference to the [`StreetscapeGeometry`](/ar/reference/java/com/google/ar/core/StreetscapeGeometry) which was hit. This Streetscape Geometry can be passed to [`Trackable.createAnchor()`](/ar/reference/java/com/google/ar/core/Trackable#createAnchor-pose) to create an anchor attached to it. \n\n### Java\n\n```java\nfor (HitResult hit : frame.hitTest(singleTapEvent)) {\n if (hit.getTrackable() instanceof StreetscapeGeometry) {\n Pose hitPose = hit.getHitPose();\n hit.getTrackable().createAnchor(hitPose);\n }\n}\n```\n\n### Kotlin\n\n```kotlin\nfor (hit in frame.hitTest(singleTapEvent)) {\n if (hit.trackable is StreetscapeGeometry) {\n val hitPose = hit.hitPose\n hit.trackable.createAnchor(hitPose)\n }\n}\n```\n\nEnable Geospatial Depth\n-----------------------\n\n[Geospatial Depth](/ar/develop/java/depth/geospatial-depth) combines Streetscape Geometry\nwith local sensor input to enhance depth data. When Geospatial Depth is enabled,\nthe output depth and raw depth images are modified to include rasterized Streetscape Geometry in addition to locally observed depth.\nThis may improve the accuracy of poses using Depth."]]