Interfejsy API Streetscape Geometry udostępniają geometrię terenu, budynków i innych obiektów w scenie. Ta geometria może służyć do zasłaniania, renderowania lub umieszczania treści AR za pomocą interfejsów API testów trafień. Dane geometryczne Street View są uzyskiwane ze zdjęć Google Street View.
Skorzystaj z przykładu
Przykładowa aplikacja geospatial_java pokazuje, jak uzyskiwać i renderować geometrie Streetscape.
Konfigurowanie interfejsu Geospatial API
Aby używać Streetscape Geometry, musisz skonfigurować interfejs Geospatial API w swoim projekcie. Aby skonfigurować interfejs Geospatial API, wykonaj instrukcje włączania interfejsu Geospatial API.
Włącz geometrię Streetscape
Interfejs Geospatial API uzyskuje dane ze Streetscape Geometry, gdy element GeospatialMode
ma wartość GeospatialMode.ENABLED
, a StreetscapeGeometryMode
– 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 } )
Uzyskiwanie danych geometrycznych ze Streetscape w sesji ARCore
Aby filtrować wyniki, użyj funkcjiSession.getAllTrackables()
i StreetscapeGeometry.class
.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
Informacje o StreetscapeGeometry
StreetscapeGeometry
zawiera informacje o budynku:
-
StreetscapeGeometry.getType()
Identyfikuje obiekt StreetscapeGeometry jako teren lub budynek. -
StreetscapeGeometry.getMesh()
Uzyskaj wielokątMesh
odpowiadający temu terenowi lub budynku. -
StreetscapeGeometry.getMeshPose()
Opisuje pochodzenie geometrii. Wszystkie punkty w elemencieMesh
powinny zostać przekształcone przezStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Dostarcza jakość danych sieci typu mesh. Poziomy szczegółowości są opisane w standardzie CityGML 2.0.
Budynek – poziom działania 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
to podstawy budynków wystające w górę na płaski dach. Wysokości budynków mogą być niedokładne.
Budynek – poziom działania 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
będzie mieć większą dokładność geometrii. Ściany z siatki i dachy lepiej dopasują się do kształtu budynku. Mniejsze elementy, takie jak kominy czy otwory dachowe, mogą nadal wystawiać się poza siatkę.
Informacje o Mesh
Mesh
to siatka wielokątów przedstawiająca rekonstrukcję geometrii Streetscape.
Każdy element Mesh
zawiera bufor wierzchołków i bufor indeksu:
Mesh.getVertexListSize()
Pobiera liczbę wierzchołków w tej siatce.Mesh.getVertexList()
Uzyskuj połączone pozycje wierzchołków sieci typu mesh według współrzędnych względemStreetscapeGeometry.getMeshPose()
.Mesh.getIndexListSize()
Pobiera liczbę indeksów w tej siatce.Mesh.getIndexList()
Uzyskiwanie indeksów wierzchołków tworzących twarz.
Dołączanie treści AR do obiektu StreetscapeGeometry
Treści AR można dołączać do geometrii Streetscape na 2 sposoby:
- Włącz Głębokość geoprzestrzenną i użyj testu trafień związanych z głębokością. Jest to zalecana i prostsza metoda.
- Użyj narzędzia
Trackable.createAnchor()
, aby utworzyć kotwicę w danej pozycji dołączonej do elementuStreetscapeGeometry
. Ta kotwica odziedziczy stan śledzenia z elementu nadrzędnegoStreetscapeGeometry
.
Wykonaj test trafień pod adresem StreetscapeGeometry
Narzędzia Frame.hitTest()
można używać do testów z użyciem geometrii Streetscape. Jeśli zostaną znalezione skrzyżowania, HitResult
zawiera informacje o pozycji o lokalizacji działania, a także odwołanie do elementu StreetscapeGeometry
, który został trafiony. Tę geometrię Streetscape możesz przekazać do Trackable.createAnchor()
, by utworzyć do niej zakotwiczoną kotwicę.
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) } }
Włącz głębokość geoprzestrzenną
Funkcja Głębokość geoprzestrzenna łączy geometrię Streetscape z danymi z lokalnego czujnika w celu ulepszenia danych o głębi. Po włączeniu Głębokości geoprzestrzennej dane wyjściowe i nieprzetworzona głębokość są modyfikowane tak, aby oprócz lokalnie obserwowanej głębi uwzględniały zrastrowane geometrię Streetscape. Może to poprawić dokładność póz z użyciem głębi.