Streetscape Geometry API menyediakan geometri medan, bangunan, atau struktur lainnya dalam sebuah tampilan. Geometri ini dapat digunakan untuk oklusi, rendering, atau penempatan konten AR melalui API hit-test. Data Streetscape Geometry diperoleh melalui gambar Google Street View.
Mencoba contoh
Aplikasi contoh geospatial_java menunjukkan cara mendapatkan dan merender Streetscape Geometries.
Menyiapkan Geospatial API
Untuk menggunakan Streetscape Geometry, Anda harus menyiapkan Geospatial API di project Anda. Ikuti petunjuk tentang cara Mengaktifkan Geospatial API untuk menyiapkan Geospatial API.
Mengaktifkan Streetscape Geometry
Geospatial API memperoleh data Streetscape Geometry saat GeospatialMode
ditetapkan ke GeospatialMode.ENABLED
dan StreetscapeGeometryMode
ditetapkan ke StreetscapeGeometryMode.ENABLED
.
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 } )
Mendapatkan Streetscape Geometry dalam sesi ARCore
GunakanSession.getAllTrackables()
dan gunakan StreetscapeGeometry.class
untuk memfilter hasil.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
Memahami StreetscapeGeometry
StreetscapeGeometry
berisi informasi tentang bangunan:
-
StreetscapeGeometry.getType()
Mengidentifikasi StreetscapeGeometry sebagai medan atau bangunan. -
StreetscapeGeometry.getMesh()
Dapatkan poligonMesh
yang sesuai dengan medan atau bangunan ini. -
StreetscapeGeometry.getMeshPose()
Menjelaskan asal geometri. Semua titik diMesh
harus ditransformasikan olehStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Memberikan kualitas data mesh. Tingkat detail dijelaskan dalam standar CityGML 2.0.
Membangun LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
terdiri dari jejak bangunan yang diekstrusi ke atas ke bagian atas yang datar. Ketinggian bangunan mungkin tidak akurat.
Membangun LOD 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
akan memiliki geometri fidelitas yang lebih tinggi. Dinding dan atap mesh akan lebih cocok dengan bentuk bangunan. Fitur yang lebih kecil seperti cerobong asap atau ventilasi atap mungkin masih menyembul ke luar mesh.
Memahami Mesh
Mesh
adalah mesh poligon yang mewakili rekonstruksi permukaan Streetscape Geometry.
Setiap Mesh
menyertakan buffer vertex dan buffer indeks:
Mesh.getVertexListSize()
Mengambil jumlah vertex dalam mesh ini.Mesh.getVertexList()
Mendapatkan posisi yang digabungkan dari vertex mesh, dalam koordinat yang relatif terhadapStreetscapeGeometry.getMeshPose()
.Mesh.getIndexListSize()
Mengambil jumlah indeks dalam mesh ini.Mesh.getIndexList()
Mendapatkan indeks vertex yang membentuk wajah.
Melampirkan konten AR ke StreetscapeGeometry
Ada dua cara untuk melampirkan konten AR ke Streetscape Geometry:
- Aktifkan Geospatial Depth dan gunakan Hit-test kedalaman. Ini adalah metode yang disarankan dan lebih mudah.
- Gunakan
Trackable.createAnchor()
untuk membuat anchor pada pose tertentu yang terpasang keStreetscapeGeometry
. Anchor ini akan mewarisi status pelacakannya dariStreetscapeGeometry
induk.
Melakukan hit-test terhadap StreetscapeGeometry
Frame.hitTest()
dapat digunakan untuk melakukan hit-test terhadap Streetscape Geometry. Jika persimpangan ditemukan, HitResult
berisi informasi pose tentang lokasi hit serta referensi ke StreetscapeGeometry
yang hit. Streetscape Geometry ini dapat diteruskan ke Trackable.createAnchor()
untuk membuat anchor yang dilampirkan.
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) } }
Mengaktifkan Geospatial Depth
Geospatial Depth menggabungkan Streetscape Geometry dengan input sensor lokal untuk meningkatkan kualitas data kedalaman. Saat Geospatial Depth diaktifkan, kedalaman output dan gambar kedalaman mentah diubah untuk menyertakan Streetscape Geometry yang dirasterkan selain kedalaman yang diamati secara lokal. Tindakan ini dapat meningkatkan akurasi pose menggunakan Kedalaman.