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 hit-test API. 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 Włączanie 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ę uliczną jako teren lub budynek. -
StreetscapeGeometry.getMesh()
Uzyskaj wielokątMesh
odpowiadający temu rodzajowi terenu lub budynkowi. -
StreetscapeGeometry.getMeshPose()
Opisuje początek geometrii. 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. 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 siatka wielokątów 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łączane 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ą twarz.
Załączanie treści AR do StreetscapeGeometry
Treści AR można dołączyć do geometrii Streetscape na 2 sposoby:
- Włącz Głębokie powiązanie z lokalizacją i wykonaj test dopasowania głębi. Jest to zalecana i łatwiejsza 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 uderzone. 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 zawierały rastrową geometrię Streetscape, a nie tylko lokalnie obserwowaną głębię. Może to poprawić dokładność wykrywania póz przy użyciu Depth.