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

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

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.

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

  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 interfejs ARCore API.
    • Kliknij Włącz.
    • Wróć do Biblioteki.
    • Wyszukaj Maps SDK na Androida.
    • Kliknij Włącz.
  3. 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:

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

Projekt stały

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.

Zielona strzałka pokazuje lokalizację i kierunek.

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.

Umieść znacznik, dotykając mapy.

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.

Umieść znacznik, dotykając mapy.

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: