1. Opis
ARCore to platforma Google do tworzenia treści w rzeczywistości rozszerzonej na smartfonach. Nowy interfejs ARCore Geospatial API wzbogaca rzeczywistość rozszerzoną o nowy aspekt, który umożliwia umieszczanie punktów na trasie w rzeczywistości rozszerzonej wokół rzeczywistych punktów orientacyjnych.
Co utworzysz
Z tego ćwiczenia z programowania dowiesz się, jak korzystać z interfejsu ARCore Geospatial API. Dowiesz się, jakie informacje interfejs Geospatial API może zwiększyć wygodę użytkowników korzystających z AR i jak można wykorzystać te dane do prostego wyszukiwania tras AR.
Czego się nauczysz
- Jak skonfigurować projekt ARCore, który korzysta z interfejsu Geospatial API.
- Jak zażądać danych geograficznych z interfejsu Geospatial API i wyświetlić je w Mapach Google.
- Jak umieścić kotwicę powiązaną z rzeczywistą lokalizacją.
Czego potrzebujesz
- Obsługiwane urządzenie ARCore z Androidem podłączone kablem USB do komputera programisty i skonfigurowane przy użyciu debugowania USB.
- Zainstalowane i skonfigurowane Android Studio do tworzenia aplikacji na Androida.
- Usługi Google Play dla AR w wersji 1.31 lub nowszej zainstalowane na urządzeniu z Androidem, z którego korzystasz.
2. Konfigurowanie środowiska programistycznego
Konfigurowanie Android Studio
Aby rozpocząć korzystanie z interfejsu Geospatial API, udostępniliśmy projekt startowy, który zawiera podstawy projektu 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, kliknij Plik > Nowy > Projekt z kontroli wersji...
- Jeśli zobaczysz okno Witamy w Android Studio, kliknij Pobierz z VCS.
- Wybierz Git i użyj adresu URL
https://github.com/google-ar/codelab-geospatial.git
, aby zaimportować projekt.
Konfigurowanie projektu Google Cloud
Interfejs Geospatial API korzysta ze zdjęć Street View w połączeniu z informacjami z magnetometru i czujnika aparatu urządzenia, aby poprawić wartości orientacji. Aby korzystać z tej usługi, musisz skonfigurować projekt Google Cloud.
- Utwórz projekt w konsoli Google Cloud:
- Otwórz stronę Tworzenie projektu w Google Cloud Platform.
- Wpisz odpowiednią nazwę projektu (na przykład „ARCore Geospatial API”) i wybierz dowolną lokalizację.
- Kliknij Utwórz.
- Otwórz 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 ARCore API.
- Kliknij Włącz.
- Wróć do Biblioteki.
- Wyszukaj pakiet SDK Map Google na Androida.
- Kliknij Włącz.
- Utwórz dane uwierzytelniające klucza interfejsu API:
- W sekcji Interfejsy API i usługi kliknij Dane logowania.
- Na górnym pasku kliknij kolejno Utwórz dane logowania i Klucz interfejsu API.
- Zanotuj utworzony klucz, ponieważ będzie Ci potrzebny w następnym kroku. Jeśli chcesz je odzyskać, wróć na stronę Dane logowania.
Udało Ci się utworzyć projekt Google Cloud z autoryzacją klucza interfejsu API i zacząć korzystać z interfejsu Geospatial API.
Zintegruj klucz interfejsu API z projektem Android Studio
Aby powiązać klucz interfejsu API z Google Cloud ze swoim projektem, otwórz projekt utworzony w Android Studio i zmodyfikuj klucze interfejsu API:
- Otwórz aplikacja > src > AndroidManifest.xml.
- Znajdź te 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 Twoim projekcie Google Cloud.
Wartość zapisana w pliku com.google.android.ar.API_KEY
upoważnia tę aplikację do korzystania z interfejsu Geospatial API, a wartość przechowywana w pliku com.google.android.geo.API_KEY
upoważnia tę aplikację do korzystania z pakietu SDK Map Google.
Zweryfikuj projekt
Upewnij się, że projekt jest gotowy do użycia. Uruchom aplikację w Android Studio. Widok kamery powinien być widoczny, a u dołu ekranu powinna być widoczna działająca mapa.
3. Określanie pozycji użytkownika
W tym kroku dodasz kod do przykładowego projektu, aby rozpocząć korzystanie z interfejsu Geospatial API.
Konfigurowanie sesji ARCore tak, aby używała 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
}
)
}
Gdy tryb geoprzestrzenny ma wartość ENABLED
, aplikacja może uzyskiwać informacje geoprzestrzenne.
Wysyłanie prośby o dane do interfejsu Geospatial API
W polu HelloGeoRenderer.kt
odszukaj ten wiersz:
// TODO: Obtain Geospatial information and display it on the map.
Sprawdź pod nią, czy obiekt Earth jest dostępny do użycia. Właśnie wtedy będzie mieć trackingState
TrackingState.ENABLED
.
val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
// TODO: the Earth object may be used here.
}
Poniżej TODO
poproś ARCore o informacje geoprzestrzenne. Dodaj ten wiersz:
val cameraGeospatialPose = earth.cameraGeospatialPose
Otrzymasz GeospatialPose
z tymi informacjami:
- Lokalizacja wyrażona w długości i szerokości geograficznej. Wyświetlana jest też przybliżona dokładność lokalizacji.
- Wysokość oraz oszacowanie dokładności wysokości.
- Kierunek, przybliżony kierunek, w którym skierowane jest urządzenie, oraz szacunkowa dokładność kierunku.
Wyświetl informacje o położeniu na mapie
Możesz użyć elementu GeospatialPose
zapisanego w usłudze cameraGeospatialPose
, aby przenieść na mapie znacznik, który pokazuje, gdzie znajduje się użytkownik. Kontynuuj od miejsca, w którym został przerwany, i dodaj te informacje:
activity.view.mapView?.updateMapPosition(
latitude = cameraGeospatialPose.latitude,
longitude = cameraGeospatialPose.longitude,
heading = cameraGeospatialPose.heading
)
Spowoduje to ciągłe aktualizowanie pozycji mapy na podstawie wartości uzyskanych z interfejsu Geospatial API.
Wypróbuj
W Android Studio kliknij Odtwórz. Trzymaj urządzenie w górze i poruszaj nim, aby pomóc ARCore w ustaleniu śledzenia. Po chwili na mapie powinien pojawić się zielony znacznik. Ten znacznik obraca się, gdy oglądasz otoczenie. Powinien on być też ustawiony we właściwym kierunku: jeśli patrzysz fizycznie na północ, strzałka powinna także wskazywać północ.
4. Umieszczanie kotwicy za pomocą współrzędnych Ziemi
Interfejs Geospatial API może umieszczać kotwice w dowolnej parze współrzędnych i rotacji w świecie rzeczywistym. Dzięki temu użytkownicy zobaczą zakotwiczone treści, gdy odwiedzają konkretne lokalizacje.
W tym kroku dodajesz sposób na umieszczenie kotwicy, klikając mapę.
Ustaw działanie po kliknięciu mapy
Projekt ma funkcję onMapClick
, która jest wywoływana z szerokością i długością geograficzną po kliknięciu fragmentu mapy. Znajdź funkcję onMapClick
w obiekcie HelloGeoRenderer.kt
.
Upewnij się, że obiekt Earth może być używany
Przed utworzeniem kotwic w Google Earth upewnij się, że TrackingState
obiektu Ziemi to TRACKING
, co oznacza, że położenie Ziemi jest znane. Upewnij się też, że EarthState
ma wartość ENABLED
– nie wystąpiły żadne problemy z interfejsem Geospatial API. Dodaj te wiersze w tekście onMapClick
:
val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
return
}
Określ położenie nowej reklamy zakotwiczonej
Po potwierdzeniu, że obiekt Earth jest śledzony, odłącz poprzedni element earthAnchor
, jeśli taki istnieje. W następnych krokach zastąpisz element earthAnchor
nową kotwicą:
earthAnchor?.detach()
Następnie użyj narzędzia cameraGeospatialPose
, aby określić wysokość nowej kotwicy. Użyj pary współrzędnych, dotykając mapy jako pozycji kotwicy.
// 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)
createAnchor
tworzy element Anchor
o stałej wartości ze współrzędnymi geodetycznymi przy danej rotacji. Ta kotwica stara się utrzymać stabilność i ustalić określone współrzędne oraz wysokość.
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 w ustaleniu śledzenia. Po chwili powinien pojawić się zielony znacznik na mapie wskazujący Twoją aktualną pozycję.
Kliknięcie mapy korzysta z interfejsu Geospatial API, aby umieścić kotwicę, która jest ustawiona na rzeczywistej lokalizacji. Spróbuj umieścić kotwicę blisko bieżącej lokalizacji, aby widzieć ją w widoku AR. Powinno się nie zmieniać w trakcie poruszania się po środowisku.
5. Podsumowanie
Dzięki tym ćwiczeniom z programowania wiesz już, jak za pomocą interfejsu Geospatial API stworzyć proste środowisko AR powiązane ze światem rzeczywistym.
Omówione zagadnienia
- Jak skonfigurować projekt Google Cloud z włączonym interfejsem Geospatial API.
- Uzyskiwanie informacji geoprzestrzennych w projekcie ARCore i wyświetlanie ich na mapie.
- Jak umieścić reklamę zakotwiczoną w świecie rzeczywistym przy użyciu położenia geograficznego.
Dodatkowe zasoby
Więcej informacji o założeniach geograficznych i pakietach SDK używanych w tym ćwiczeniu z programowania znajdziesz w tych dodatkowych materiałach: