1. Zanim zaczniesz
ARCore to platforma Google do tworzenia na smartfonach projektów rzeczywistości rozszerzonej (AR). Interfejsy Geospatial Streetscape Geometry API i Rooftop anchor API pomagają aplikacjom AR rozpoznawać budynki w pobliżu użytkowników.
W tym laboratorium kodowania utworzysz aplikację AR, która wizualizuje geometrię ulic w Twojej okolicy i umożliwia dekorowanie jej boków. Następnie za pomocą kotwic dachowych możesz dodawać dekoracje na dachach budynków w Twojej okolicy.

Wymagania wstępne
- Podstawowa wiedza na temat AR
- Podstawowa wiedza o interfejsie ARCore Geospatial API
Czego się nauczysz
- Jak skonfigurować projekt Google Cloud, który może korzystać z interfejsów ARCore Geospatial API.
- Jak uzyskać geometrię krajobrazu ulicznego z interfejsu Geospatial API.
- Jak wizualizować budynki i tereny uzyskane z geometrii widoku ulicy.
- Jak wykonywać podstawowe obliczenia na uzyskanych wielokątach.
- Jak przeprowadzić test trafienia na geometrii.
- Jak używać kotwic dachowych do przymocowywania treści do dachów budynków.
Czego potrzebujesz
- Obsługiwane urządzenie z Androidem i ARCore podłączone kablem USB do komputera deweloperskiego i skonfigurowane z debugowaniem USB.
- Na urządzeniu deweloperskim z Androidem musi być zainstalowana usługa Google Play dla AR w wersji 1.37 lub nowszej.
- Android Studio zainstalowane i skonfigurowane do tworzenia aplikacji na Androida.
2. Konfigurowanie środowiska
Aby korzystać z interfejsów Geospatial API w Kotlinie i Android Studio, potrzebujesz projektu Google Cloud i naszego projektu początkowego.
Konfigurowanie projektu Google Cloud
ARCore Geospatial API łączy się z Google Cloud, aby dostarczać informacje o lokalizacji z systemu pozycjonowania wizualnego (VPS) Google na obszarach objętych Google Street View.
Aby użyć tego serwera w projekcie, wykonaj te czynności:
- Utwórz projekt w Google Cloud.

- W polu Nazwa projektu wpisz odpowiednią nazwę, np.
ARCore Geospatial API project, i wybierz dowolną lokalizację. - Kliknij Utwórz.
- W konsoli Google Cloud na stronie wyboru projektu kliknij Utwórz projekt.
- Aby wyświetlić interfejs ARCore API dla tego projektu, kliknij ten link i kliknij Włącz:
- Utwórz klucz interfejsu API dla projektu:
- W sekcji Interfejsy API i usługi wybierz Dane logowania.
- Kliknij Utwórz dane logowania i wybierz Klucz interfejsu API.
- Zapisz klucz, ponieważ będzie Ci później potrzebny.
Masz utworzony projekt Google Cloud z autoryzacją za pomocą klucza interfejsu API i możesz używać interfejsu Geospatial API w projekcie przykładowym.
Konfigurowanie Androida Studio
Aby ułatwić Ci rozpoczęcie pracy z interfejsem Geospatial API, udostępniliśmy projekt startowy, który zawiera podstawy projektu ARCore zintegrowanego z interfejsem Geospatial API.
Aby skonfigurować Android Studio, wykonaj te czynności:
- Otwórz Android Studio i wykonaj jedną z tych czynności:
- Jeśli masz już otwarty projekt, kliknij Plik > Nowy > Projekt z systemu kontroli wersji.
- Jeśli zobaczysz okno Witamy w Androidzie Studio, kliknij Pobierz z VCS.

- Wybierz Git i wpisz
https://github.com/google-ar/codelab-streetscape-geometry-rooftop-anchors.git, aby zaimportować projekt.
Zintegruj klucz interfejsu API z projektem Android Studio.
Aby powiązać klucz interfejsu API z Google Cloud z projektem, wykonaj te czynności:
- W Android Studio kliknij app > src i dwukrotnie kliknij
AndroidManifest.xml. - Znajdź te wpisy
meta-data:<meta-data android:name="com.google.android.ar.API_KEY" android:value="API_KEY" /> - Zastąp symbol zastępczy
API_KEYkluczem API utworzonym w projekcie Google Cloud. Wartość przechowywana wcom.google.android.ar.API_KEYautoryzuje tę aplikację do korzystania z interfejsu Geospatial API.
Weryfikacja projektu
- Aby zweryfikować projekt, uruchom aplikację na urządzeniu deweloperskim. U góry ekranu powinien być widoczny widok z kamery i informacje o debugowaniu geoprzestrzennym. Powinny być też widoczne przyciski i elementy sterujące, które wydają się nie działać. Ich funkcjonalność zaprogramujesz w projekcie w trakcie tego laboratorium.

3. Wizualizacja danych geometrii widoku ulicy
Po potwierdzeniu, że interfejs Geospatial API działa na Twoim urządzeniu, możesz pobrać z niego geometrię widoku ulicy.
Włączanie geometrii krajobrazu
- W pliku
StreetscapeGeometryActivity.ktznajdź ten wiersz:// TODO: Enable Streetscape Geometry. - Po tej linii włącz tryb geometrii widoku ulicy:
Gdy interfejs Geospatial API i tryb geometrii krajobrazu ulicznego są włączone, aplikacja może otrzymywać informacje o geometrii krajobrazu ulicznego w pobliżu użytkownika.streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
Uzyskiwanie geometrii krajobrazu ulicy
- W pliku
StreetscapeGeometryActivity.ktznajdź ten wiersz:// TODO: Obtain Streetscape Geometry. - Po tej linii uzyskaj geometrię widoku ulicy, pobierając wszystkie obiekty
Trackablei filtrując je wedługStreetscapeGeometry: Używasz tych geometrii w prostej wizualizacji, która jest dostępna w projekcie przykładowym. Wizualizacja ta wyświetla każdy budynek lub wielokąt terenu w innym kolorze.val streetscapeGeometry = session.getAllTrackables(StreetscapeGeometry::class.java) - W następnym wierszu dodaj ten kod:
streetscapeGeometryRenderer.render(render, streetscapeGeometry) - Uruchom aplikację i odwiedź budynek w swojej okolicy.
- Po zakończeniu lokalizacji geoprzestrzennej kliknij
Ustawienia i włącz wizualizację geometrii krajobrazu ulicznego. - Obejrzyj budynek w AR. Każdy segmentowany budynek ma swój kolor, a wartości wyliczeniowe
QualityiTypegeometrii znajdującej się w centrum są wyświetlane.

4. Przeprowadzanie testu trafienia za pomocą danych geometrii widoku ulicy
Teraz, gdy widzisz geometrię widoku ulicy, możesz użyć testu trafienia, aby ozdobić budynek. Test trafienia wykrywa przecięcie między geometrią wirtualną a promieniem. Test trafienia służy do znajdowania geometrii, w którą użytkownik kliknie.
Przeprowadzanie testu trafienia
W tej sekcji umieścisz gwiazdę na fasadzie budynku, gdy użytkownik kliknie jego geometrię. W tym celu wykonujesz test trafienia z perspektywy użytkownika w świecie i rejestrujesz, które obiekty AR napotka na swojej drodze. Następnie używasz tych informacji, aby sprawdzić, czy użytkownik kliknął wielokąt budynku.
- W pliku
StreetscapeCodelabRenderer.ktznajdź ten wiersz:// TODO: determine the Streetscape Geometry at the center of the viewport - Po tym wierszu dodaj ten kod:
Ten kod używa współrzędnych środka do znalezienia geometrii widoku ulicy, która jest budynkiem. Ten wynik służy do dodawania dekoracji.val centerHits = frame.hitTest(centerCoords[0], centerCoords[1]) val hit = centerHits.firstOrNull { val trackable = it.trackable trackable is StreetscapeGeometry && trackable.type == StreetscapeGeometry.Type.BUILDING } ?: return
Dodawanie gwiazdki po kliknięciu
- W pliku
StreetscapeCodelabRenderer.ktznajdź ten wiersz:// TODO: Create an anchor for a star, and add it to the starAnchors object. - Po tym wierszu dodaj ten kod:
Klasaval transformedPose = ObjectPlacementHelper.createStarPose(hit.hitPose) val anchor = hit.trackable.createAnchor(transformedPose) starAnchors.add(anchor)ObjectPlacementHelperokreśla odpowiednie miejsce na umieszczenie gwiazdki, analizując pozycję trafienia. ObiektstarAnchorssłuży do renderowania gwiazd w widoku AR.
Wypróbuj
- Uruchom aplikację i odwiedź budynek w swojej okolicy.
- Po zakończeniu lokalizacji geoprzestrzennej skieruj aparat na budynek i kliknij ekran. Na środku ekranu na budynku pojawia się gwiazdka.

5. Korzystanie z danych o kotwicach na dachu
Na koniec użyj kotwic dachowych, aby dodać dekoracje na szczycie budynku. Kotwice na dachu pomagają przyłączać kotwice AR do dachów budynków za pomocą szerokości i długości geograficznej. Używasz tych punktów, aby przyczepiać balony do budynków w pobliżu użytkownika.
Dodawanie zachowań do trybu balonu
Projekt ma 2 tryby umieszczania komponentów: tryb słonecznika, którego już używasz, i tryb balonu.
Aby zaprogramować działanie w trybie balonu, wykonaj te czynności:
- W pliku
StreetscapeCodelabRenderer.ktznajdź ten wiersz:// TODO: Create an anchor for a balloon and add it to the balloonAnchors object. - Użyj pozycji uderzenia, aby utworzyć świetne miejsce dla balonu:
val transformedPose = ObjectPlacementHelper.createBalloonPose(frame.camera.pose, hit.hitPose) - Przekształć zmienną
transformedPosew pozycję geoprzestrzenną:val earth = session?.earth ?: return val geospatialPose = earth.getGeospatialPose(transformedPose) - Utwórz punkt zakotwiczenia na dachu z przekształconymi współrzędnymi geograficznymi:
earth.resolveAnchorOnRooftopAsync( geospatialPose.latitude, geospatialPose.longitude, 0.0, transformedPose.qx(), transformedPose.qy(), transformedPose.qz(), transformedPose.qw() ) { anchor, state -> if (!state.isError) { balloonAnchors.add(anchor) } }
Wypróbuj
- Uruchom aplikację i odwiedź budynek w swojej okolicy.
- Po zakończeniu lokalizacji geoprzestrzennej przełącz się na tryb balonu i kliknij budynek. Nad budynkiem pojawia się balon.

6. Podsumowanie
Gratulacje! Masz aplikację AR, która wizualizuje geometrię ulic w Twojej okolicy i pozwala ozdabiać je gwiazdami. Używasz też kotwic na dachu, aby dodawać balony na szczytach budynków w okolicy.
