Interfejsy API Streetscape Geometry udostępniają geometrię terenu, budynków i innych struktur w scenie. Geometria może służyć do zasłonięcia, renderowania lub umieszczania treści AR za pomocą interfejsów API testowania kolizji. Dane geometryczne dotyczące ulicy są uzyskiwane na podstawie zdjęć Google Street View.
Wypróbuj przykład
Przykładowa aplikacja geospatial_java pokazuje, jak pobierać i renderować geometrie Streetscape.
Konfigurowanie interfejsu Geospatial API
Aby korzystać z geometrii Streetscape, musisz skonfigurować interfejs Geospatial API w projekcie. Aby skonfigurować interfejs Geospatial API, wykonaj instrukcje dotyczące włączania interfejsu Geospatial API.
Włączanie geometrii 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 } )
Pobieranie geometrii Streetscape w sesji ARCore
Aby filtrować wyniki, użyjSession.getAllTrackables()
i StreetscapeGeometry.class
.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
StreetscapeGeometry
StreetscapeGeometry
zawiera informacje o budynku:
-
StreetscapeGeometry.getType()
Identyfikuje geometrię ulicy jako teren lub budynek. -
StreetscapeGeometry.getMesh()
Uzyskaj wielokątMesh
odpowiadający temu rodzajowi terenu lub budynkowi. -
StreetscapeGeometry.getMeshPose()
Określa początek układu geometrycznego. Wszystkie punkty wMesh
powinny zostać przekształcone za pomocąStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Pozwala określić jakość danych siatki. Poziomy szczegółowości są opisane w standardzie CityGML 2.0.
Budynek LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
składa się z wypukłych rzutów poziomych budynku, które kończą się płaskim szczytem. Wysokość budynków może być niedokładna.
Budynek LOD 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
będzie mieć geometrię o wyższej jakości. Siatka na ścianach i dachach będzie lepiej dopasowana do kształtu budynku. Mniejsze elementy, takie jak kominy czy otwory wentylacyjne w dachu, mogą wystawać poza siatkę.
Mesh
Mesh
to wielokątna siatka reprezentująca odtworzenie powierzchni geometrii ulicy.
Każdy element Mesh
zawiera bufor wierzchołków i bufor indeksów:
Mesh.getVertexListSize()
Zwraca liczbę wierzchołków w tej siatce.Mesh.getVertexList()
Uzyskaj złączone pozycje wierzchołków siatki w swoich współrzędnych względemStreetscapeGeometry.getMeshPose()
.Mesh.getIndexListSize()
Pobiera liczbę indeksów w tej siatce.Mesh.getIndexList()
Uzyskaj indeksy wierzchołków, które tworzą powierzchnię.
Załączanie treści AR do StreetscapeGeometry
Treści AR można dołączyć do geometrii Streetscape na 2 sposoby:
- Włącz Głębokie rozróżnianie przestrzenne i wykonaj test trafień głębokości. Jest to zalecana i prostsza metoda.
- Użyj
Trackable.createAnchor()
, aby utworzyć kotwicę w danej pozie dołączonej doStreetscapeGeometry
. Ten kotwnik odziedziczy stan śledzenia z poziomu elementu nadrzędnegoStreetscapeGeometry
.
Przeprowadź test trafień w przypadku 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. Geometrię ulicy można przekazać do Trackable.createAnchor()
, aby utworzyć do niej dołączoną 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łączanie głębi danych geograficznych
Głębia geoprzestrzenna łączy geometrię Streetscape z danymi z lokalnych czujników, aby poprawić dane o głębi. Gdy włączona jest opcja Głębia geoprzestrzenna, obrazy głębi wyjściowej i surowej głębi są modyfikowane, aby uwzględnić rastrową geometrię Streetscape, a nie tylko lokalnie obserwowaną głębię. Może to poprawić dokładność wykrywania póz przy użyciu Depth.