Utwórz aplikację rzeczywistości rozszerzonej (AR) za pomocą nowego interfejsu ARCore Geospatial API

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

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.

  1. 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. Pobierz z lokalizacji VCS
  2. 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.

  1. Utwórz projekt w konsoli Google Cloud:
  2. 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.
  3. 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:

  1. Otwórz aplikacja > src > AndroidManifest.xml.
  2. 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" />
    
  3. 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.

Projekt stały

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.

Zielona strzałka podąża za Twoją lokalizacją i kierunkiem.

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.

Umieść znacznik, dotykając mapy.

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.

Umieść znacznik, dotykając mapy.

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: