1. Omówienie
ARCore to opracowana przez Google platforma do tworzenia rzeczywistości rozszerzonej na smartfony. Nowy ARCore Geospatial API wprowadza nowy aspekt rzeczywistości rozszerzonej, który umożliwia umieszczanie punktów pośrednich w rzeczywistości rozszerzonej zależnej od lokalizacji wokół rzeczywistych punktów orientacyjnych.
Co utworzysz
W ramach tego ćwiczenia w programie zaczniesz korzystać z interfejsu ARCore Geospatial API. Dowiesz się, jakie informacje interfejs Geospatial API może zaoferować w ogólnym środowisku AR i jak można je wykorzystać w łatwym wyszukiwaniu w AR.
Czego się nauczysz
- Jak skonfigurować projekt ARCore, który używa interfejsu Geospatial API.
- Jak zażądać danych geograficznych za pomocą interfejsu Geospatial API i wyświetlać je w Mapach Google.
- Jak umieścić reklamę zakotwiczoną dołączoną do rzeczywistej lokalizacji.
Czego potrzebujesz
- Obsługiwane urządzenie z Androidem ARCore podłączone do komputera kablem USB ze skonfigurowanym debugowaniem USB.
- Aplikacja Android Studio jest zainstalowana i skonfigurowana do tworzenia aplikacji na Androida.
- Usługi Google Play dla AR w wersji 1.31 lub nowszej zainstalowane na urządzeniu z Androidem przeznaczonym do programowania.
2. Konfigurowanie środowiska programistycznego
Konfigurowanie Android Studio
Aby zacząć korzystać z interfejsu Geospatial API, udostępniliśmy projekt startowy, który zawiera podstawowe informacje o projekcie ARCore zintegrowanego z pakietem SDK Map Google. Dzięki temu możesz szybko zacząć korzystać z interfejsu Geospatial API.
- Uruchom Android Studio i zaimportuj projekt z VCS.
- Jeśli masz już otwarty projekt, użyj opcji Plik > Nowe > Projekt z poziomu kontroli wersji...
- Jeśli pojawi się okno Welcome to Android Studio, użyj opcji Get from VCS.
- Wybierz Git i użyj adresu URL
https://github.com/google-ar/codelab-geospatial.git
, aby zaimportować projekt.
Skonfiguruj projekt Google Cloud
Aby poprawić wartości orientacji, interfejs Geospatial API wykorzystuje zdjęcia Street View w połączeniu z informacjami z magnesu urządzenia i czujnika aparatu. Aby skorzystać z tej usługi, musisz skonfigurować projekt Google Cloud.
- Utwórz projekt w konsoli Google Cloud:
- Odwiedź stronę Tworzenie projektu w Google Cloud Platform.
- Wpisz odpowiednią nazwę projektu (np. „ARCore Geospatial API project”) i wybierz dowolną lokalizację.
- Kliknij Utwórz.
- Odwiedź stronę Tworzenie projektu w Google Cloud Platform.
- Włącz niezbędne interfejsy API:
- Na pasku bocznym wybierz Interfejsy API i Usługi, a następnie Biblioteka.
- Wyszukaj interfejs ARCore API.
- Kliknij Włącz.
- Wróć do Biblioteki.
- Wyszukaj Maps SDK na Androida.
- Kliknij Włącz.
- Utwórz dane logowania klucza interfejsu API:
- W sekcji Interfejsy API i Services, wybierz Credentials (Dane logowania).
- Na górnym pasku kliknij Create Credentials (Utwórz dane logowania), a następnie API Key (Klucz interfejsu API).
- Zanotuj klucz utworzony w razie potrzeby w następnym kroku. Jeśli chcesz je pobrać, wróć na stronę Dane logowania.
Wykonując te kroki, masz już utworzony projekt Google Cloud z autoryzacją klucza interfejsu API i możesz zacząć korzystać z interfejsu Geospatial API.
Zintegruj klucz interfejsu API z projektem Android Studio
Aby powiązać klucz interfejsu API z Google Cloud z projektem, otwórz projekt utworzony w Android Studio i zmodyfikuj klucze interfejsu API:
- Otwórz aplikację > src > AndroidManifest.xml.
- Znajdź następujące wpisy (
meta-data
):<meta-data android:name="com.google.android.ar.API_KEY" android:value="PLACEHOLDER_API_KEY" /> <meta-data android:name="com.google.android.geo.API_KEY" android:value="PLACEHOLDER_API_KEY" />
- Zastąp
PLACEHOLDER_API_KEY
kluczem interfejsu API utworzonym w projekcie Google Cloud.
Wartość przechowywana w zasadzie com.google.android.ar.API_KEY
autoryzuje aplikację do używania interfejsu Geospatial API. Wartość przechowywana w zasadzie com.google.android.geo.API_KEY
autoryzuje aplikację do korzystania z pakietu SDK Map Google.
Zweryfikuj projekt
Sprawdź, czy projekt jest gotowy. Uruchom aplikację w Android Studio. U dołu ekranu powinien być widoczny widok z kamery oraz działająca mapa.
3. Określ pozycję użytkownika
W tym kroku dodasz do przykładowego projektu kod, aby rozpocząć korzystanie z interfejsu Geospatial API.
Konfigurowanie sesji ARCore pod kątem użycia interfejsu Geospatial API
Aby uzyskać dane geoprzestrzenne, musisz włączyć interfejs Geospatial API. Zmień GeospatialMode
w konfiguracji sesji na ENABLED
, modyfikując funkcję configureSession
w HelloGeoActivity.kt
:
fun configureSession(session: Session) {
session.configure(
session.config.apply {
// Enable Geospatial Mode.
geospatialMode = Config.GeospatialMode.ENABLED
}
)
}
Tryb geoprzestrzenny to ENABLED
, ale aplikacja może uzyskiwać informacje geoprzestrzenne.
Wysyłanie żądania danych do interfejsu Geospatial API
W HelloGeoRenderer.kt
odszukaj ten wiersz:
// TODO: Obtain Geospatial information and display it on the map.
Poniżej sprawdź, czy obiekt Earth jest dostępny do użycia. Wtedy będzie trackingState
TrackingState.ENABLED
.
val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
// TODO: the Earth object may be used here.
}
Pod TODO
poproś ARCore o informacje geoprzestrzenne. Dodaj ten wiersz:
val cameraGeospatialPose = earth.cameraGeospatialPose
Otrzymasz wtedy element GeospatialPose
zawierający te informacje:
- Lokalizacja wyrażona w postaci szerokości i długości geograficznej. Zobaczysz też oszacowanie dokładności lokalizacji.
- Wzniesienie oraz oszacowanie dokładności wzniesienia.
- Kierunek, przybliżony kierunek, w którym jest ustawione urządzenie, oraz szacunkowa dokładność kierunku.
Wyświetl informacje o pozycji na mapie
Możesz użyć funkcji GeospatialPose
zapisanej w usłudze cameraGeospatialPose
, aby przenieść znacznik na mapie, który pokazuje, gdzie znajduje się użytkownik. Kontynuuj od miejsca, w którym został przerwany, i dodaj:
activity.view.mapView?.updateMapPosition(
latitude = cameraGeospatialPose.latitude,
longitude = cameraGeospatialPose.longitude,
heading = cameraGeospatialPose.heading
)
Dzięki temu położenie mapy jest stale aktualizowane przy użyciu wartości uzyskanych z interfejsu Geospatial API.
Wypróbuj
W Android Studio kliknij Odtwórz. Trzymaj urządzenie w górę i poruszaj nim, aby pomóc ARCore śledzić ruch. Po chwili na mapie powinien pojawić się zielony znacznik. Ten znacznik obraca się, gdy oglądasz swoje otoczenie. Strzałka powinna też wskazywać właściwy kierunek: gdy patrzysz na północ, strzałka wskazuje też północ.
4. Umieszczanie kotwicy za pomocą współrzędnych Earth
Interfejs Geospatial API może umieszczać kotwice w dowolnej parze współrzędnych i obrocie w świecie rzeczywistym. Dzięki temu użytkownicy zobaczą zakotwiczone treści, gdy odwiedzają określone lokalizacje.
W tym kroku dodajesz sposób umieszczania kotwicy, dotykając mapy.
Ustaw działanie po dotknięciu mapy
Projekt zawiera funkcję onMapClick
, która jest wywoływana wraz z szerokością i długością geograficzną po kliknięciu fragmentu mapy. Znajdź funkcję onMapClick
w HelloGeoRenderer.kt
.
Upewnij się, że obiekt Earth może być używany
Przed utworzeniem reklam zakotwiczonych w aplikacji Earth upewnij się, że parametr TrackingState
obiektu Earth ma wartość TRACKING
, co oznacza, że jest znana pozycja Ziemi. Upewnij się też, że EarthState
to ENABLED
, co oznacza, że nie wystąpiły żadne problemy z interfejsem Geospatial API. Dodaj te wiersze w obrębie onMapClick
:
val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
return
}
Określ położenie nowej kotwicy
Po potwierdzeniu, że obiekt Earth śledzi śledzenie, odłącz poprzedni element earthAnchor
, jeśli istnieje. W następnych krokach zastąp element earthAnchor
nową kotwicą:
earthAnchor?.detach()
Następnie użyj właściwości cameraGeospatialPose
, by określić wysokość nowej kotwicy. Aby określić położenie reklamy zakotwiczonej, użyj pary współrzędnych z klikania mapy.
// Place the earth anchor at the same altitude as that of the camera to make it easier to view.
val altitude = earth.cameraGeospatialPose.altitude - 1
// The rotation quaternion of the anchor in the East-Up-South (EUS) coordinate system.
val qx = 0f
val qy = 0f
val qz = 0f
val qw = 1f
earthAnchor =
earth.createAnchor(latLng.latitude, latLng.longitude, altitude, qx, qy, qz, qw)
Funkcja createAnchor
tworzy element Anchor
powiązany ze współrzędnymi geodezyjnymi przy danej obrocie. Stara się utrzymać stabilną pozycję i ustalić współrzędne oraz wysokość nad poziomem morza.
Pokaż umieszczony znacznik na mapie
Na koniec przenieś nowy znacznik, który wskazuje, gdzie został umieszczony:
activity.view.mapView?.earthMarker?.apply {
position = latLng
isVisible = true
}
Wypróbuj
W Android Studio kliknij Odtwórz. Trzymaj urządzenie w górze i poruszaj nim, aby pomóc ARCore śledzić ruch. Po chwili na mapie pojawi się zielony znacznik wskazujący Twoją aktualną pozycję.
Kliknięcie mapy powoduje umieszczenie reklamy zakotwiczonej na stałej lokalizacji w świecie rzeczywistym przy użyciu interfejsu Geospatial API. Umieść reklamę zakotwiczoną blisko swojej bieżącej lokalizacji, tak aby była widoczna w widoku AR. Aplikacja powinna pozostać stabilna podczas poruszania się po Twoim środowisku.
5. Podsumowanie
Dzięki tym ćwiczeniom w programie wiesz, jak używać interfejsu Geospatial API do tworzenia prostych funkcji AR, które są powiązane ze światem rzeczywistym.
Omówione zagadnienia
- Jak skonfigurować projekt Google Cloud z włączonym interfejsem Geospatial API.
- Jak uzyskać informacje geoprzestrzenne w projekcie ARCore i wyświetlić je na mapie.
- Jak umieścić reklamę zakotwiczoną w świecie rzeczywistym za pomocą pozycjonowania geograficznego.
Dodatkowe materiały
Więcej informacji o pojęciach geograficznych i pakietach SDK używanych w tym ćwiczeniu z programowania znajdziesz w tych dodatkowych materiałach: