Streetscape Geometry API 提供場景中地形、建築物或其他結構結構的幾何圖形。幾何圖形可用於透過點擊測試 API 進行遮蔽、算繪,或放置 AR 內容。街景服務幾何圖形資料是透過 Google 街景服務圖像取得。
試用範例
geogeo_java 範例應用程式示範如何取得並呈現街景幾何圖形。
設定地理空間 API
如要使用 Streetscape 幾何圖形,您必須在專案中設定 Geospatial API。 請按照啟用地理空間 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 工作階段中取得 Streetscape 幾何圖形
使用Session.getAllTrackables()
並使用 StreetscapeGeometry.class
篩選結果。
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
瞭解 StreetscapeGeometry
StreetscapeGeometry
包含建築物相關資訊:
-
StreetscapeGeometry.getType()
將 StreetscapeGeometry 歸類為地形或建築物。 -
StreetscapeGeometry.getMesh()
取得與這個地形或建築物對應的多邊形Mesh
。 -
StreetscapeGeometry.getMeshPose()
說明幾何圖形的起點。Mesh
中的所有點都應透過StreetscapeGeometry.getMeshPose()
轉換。 -
StreetscapeGeometry.getQuality()
提供網格資料的品質。如需詳細資料等級的說明,請參閱 CityGML 2.0 標準。
建築 LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
包含從向上延伸至平面的建築物藍圖。建築物高度可能不正確。
建築物 LOD 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
的精確度較高。網格的牆壁和屋頂會更貼近建築物的形狀。煙囪或屋頂通風等小型特色,仍然可以在網格外醒來。
瞭解 Mesh
Mesh
是多邊形網格,代表街景服務幾何圖形的表面重新建構情形。
每個 Mesh
都包含一個頂點緩衝區和索引緩衝區:
Mesh.getVertexListSize()
擷取這個網格中的端點數量。Mesh.getVertexList()
取得網格端點的串連位置 (在相對於StreetscapeGeometry.getMeshPose()
的座標中)。Mesh.getIndexListSize()
擷取這個網格中的索引數量。Mesh.getIndexList()
取得構成臉孔的頂點索引。
將 AR 內容附加至 StreetscapeGeometry
將 AR 內容附加至 Streetscape 幾何圖形的方法有兩種:
- 啟用「地理空間深度」並使用 Depth 命中測試。這是建議操作更簡單的方法。
- 使用
Trackable.createAnchor()
為附加至StreetscapeGeometry
的特定姿勢建立錨點。這個錨定標記會沿用父項StreetscapeGeometry
的追蹤狀態。
對 StreetscapeGeometry
執行命中測試
Frame.hitTest()
可用於對 Streetscape 幾何圖形進行測試。如果有交集,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) } }
啟用地理空間深度
地理空間深度結合街景幾何圖形與本機感應器輸入資料,有效提升深度資料。啟用地理空間深度後,系統會修改輸出深度和原始深度圖片,藉此納入光柵化的街景幾何圖形,以及當地的觀測深度。這有助於提高姿勢使用深度。