Interfejsy API Streetscape Geometry udostępniają geometrię terenu, budynków i innych struktur w scenie. Geometrii można używać do przesłonięcia, renderowania i umieszczania treści AR za pomocą interfejsów API do testów trafień. Dane geometryczne Streetscape uzyskuje się ze zdjęć Google Street View.
Zobacz fragment
Przykładowa aplikacja geospatial_java pokazuje, jak uzyskać i wyrenderować geometrię Streetscape.
Konfigurowanie interfejsu Geospatial API
Aby korzystać z funkcji Streetscape Geometry, musisz skonfigurować w projekcie interfejs Geospatial API. Aby skonfigurować interfejs Geospatial API, postępuj zgodnie z instrukcjami włączania interfejsu Geospatial API.
Włącz geometrię Streetscape
Interfejs Geospatial API uzyskuje dane geometrii Streetscape, gdy parametr GeospatialMode
ma wartość GeospatialMode.ENABLED
, a parametr StreetscapeGeometryMode
ma wartość 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 geometrii Streetscape w sesji ARCore
UżyjSession.getAllTrackables()
i StreetscapeGeometry.class
, aby filtrować wyniki.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
Informacje o StreetscapeGeometry
StreetscapeGeometry
zawiera informacje o budynku:
-
StreetscapeGeometry.getType()
Identyfikuje geometrię ulicy jako teren lub budynek. -
StreetscapeGeometry.getMesh()
Znajdź wielokątMesh
odpowiadający temu terenowi lub budynku. -
StreetscapeGeometry.getMeshPose()
Opisuje pochodzenie geometrii. Wszystkie punkty w elemencieMesh
powinny zostać przekształcone w obiektyStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Zapewnia jakość danych sieci typu mesh. Poziomy szczegółowości znajdziesz w standardzie CityGML 2.0.
Budynek – LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
składa się z podstaw budynków rozciągniętych w górę do płaskiego blatu. Wysokość budynków może być niedokładna.
Budynek LOD 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
będzie mieć wyższą dokładność geometrii. Ściany z siatki i dachy będą lepiej dopasowane do kształtu budynku. Mniejsze elementy, takie jak kominy czy otwory dachowe, mogą nadal pojawiać się na zewnątrz siatki.
Informacje o Mesh
Mesh
to wielokątna siatka reprezentująca odtworzenie powierzchni geometrii ulicy.
Każdy obiekt Mesh
zawiera bufor wierzchołkowy i bufor indeksu:
Mesh.getVertexListSize()
Pobiera liczbę wierzchołków w tej siatce.Mesh.getVertexList()
Uzyskaj połączone położenie wierzchołków siatki we współrzędnych względemStreetscapeGeometry.getMeshPose()
Mesh.getIndexListSize()
Pobiera liczbę indeksów w tej siatce.Mesh.getIndexList()
Uzyskaj indeksy wierzchołków tworzących twarz.
Załączanie treści AR do StreetscapeGeometry
Treści AR można dołączać do geometrii Streetscape na 2 sposoby:
- Włącz opcję Głębokość geoprzestrzenna i użyj testu działań związanych z głębokością. Jest to zalecana i łatwiejsza metoda.
- Użyj narzędzia
Trackable.createAnchor()
, aby utworzyć reklamę zakotwiczoną w danej pozycji dołączonej do elementuStreetscapeGeometry
. Ten kotwnik odziedziczy stan śledzenia z poziomu elementu nadrzędnegoStreetscapeGeometry
.
Przeprowadź test trafień na StreetscapeGeometry
Frame.hitTest()
można użyć do przetestowania dopasowania do geometrii Streetscape. Jeśli znaleziono punkty przecięcia, HitResult
zawiera informacje o miejscu uderzenia oraz odniesienie do StreetscapeGeometry
, które zostało uderzenie. Tę geometrię Streetscape można przekazać do obiektu Trackable.createAnchor()
, aby utworzyć dołączoną do niej 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łębię geoprzestrzenną
Głębia geoprzestrzenna łączy geometrię Streetscape z danymi z lokalnych czujników, aby poprawić dane o głębi. Gdy włączona jest funkcja Głębokość geoprzestrzenna, Obrazy głębi wyjściowej i nieprzetworzonej głębi są modyfikowane tak, by oprócz lokalnie obserwowanej głębi uwzględnić zrasteryzowaną geometrię Streetscape. Może to poprawić dokładność pozycji z wykorzystaniem głębi.