在 Android SDK (Kotlin/Java) 上使用您周遭的建築物和地形

Streetscape 幾何圖形 API 提供場景中地形、建築物或其他建築物的幾何圖形。透過命中測試 API,幾何圖形可用於遮蔽、顯示或放置 AR 內容。可透過 Google 街景服務圖像取得街景服務幾何圖形資料。

試用範例

geospatial_java 範例應用程式示範如何取得及算繪街景服務幾何圖形。

設定 Geospatial API

如要使用 Streetscape 幾何圖形,必須先在專案中設定 Geospatial API。 按照操作說明啟用 Geospatial API,設定 Geospatial API。

啟用 Streetscape 幾何圖形

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 工作階段中取得 Streetscape 幾何圖形

使用 Session.getAllTrackables() 並使用 StreetscapeGeometry.class 篩選結果。

Java

session.getAllTrackables(StreetscapeGeometry.class);

Kotlin

session.getAllTrackables(StreetscapeGeometry::class.java)

瞭解 StreetscapeGeometry

StreetscapeGeometry 包含建築物的相關資訊:

建築物 LOD 1

StreetscapeGeometry.Quality.BUILDING_LOD_1 包含向上延伸至平坦的建築物平面圖。建築物高度可能不準確。

建築物 LOD 2

StreetscapeGeometry.Quality.BUILDING_LOD_2 的幾何圖形較保真度較高,網格的牆面和屋頂會更接近建築物的形狀。不過,某些小型功能 (例如煙囪或屋頂通風口) 仍可能在網格外發出。

瞭解 Mesh

Mesh 是一個多邊形網格,代表街景服務幾何圖形的表面重建。 每個 Mesh 都包含頂點緩衝區和索引緩衝區:

將 AR 內容附加至 StreetscapeGeometry

有兩種方式可將 AR 內容附加至街景服務幾何圖形:

StreetscapeGeometry 執行命中測試

Frame.hitTest() 可用於對照街景服務幾何圖形,進行測試。如果有找到的十字路口,HitResult 會包含命中位置的相關資訊,以及找到的 StreetscapeGeometry 參照。您可以將這個街景服務幾何圖形傳遞至 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)
  }
}

啟用地理空間深度

地理空間深度:結合街景服務幾何圖形 來強化深度資料。啟用地理空間深度後, 除了在本機觀察到的深度之外,輸出的深度和原始深度影像都經過修改,加入光柵化的街景服務幾何圖形。 這可透過深度運算提升姿勢的準確度。