Mit der neuen ARCore Geospatial API eine Augmented-Reality-App erstellen

1. Übersicht

ARCore ist das Framework von Google zum Erstellen von Augmented-Reality-Erlebnissen auf Smartphones. Die neue ARCore Geospatial API ergänzt die Augmented Reality um eine neue Funktion: Sie können damit standortspezifische Augmented Reality-Wegpunkte um reale Sehenswürdigkeiten herum platzieren.

Aufgaben

In diesem Codelab lernen Sie die ARCore Geospatial API kennen. Sie erfahren, welche Informationen die Geospatial API für Ihre AR-Nutzung insgesamt bietet und wie diese Daten für eine einfache AR-Wegsuche genutzt werden können.

Lerninhalte

  • Hier erfährst du, wie du ein ARCore-Projekt einrichtest, das die Geospatial API verwendet.
  • Geografische Daten von der Geospatial API anfordern und mit Google Maps darstellen
  • Hier erfahren Sie, wie Sie einen Anker an einem realen Ort platzieren.

Voraussetzungen

2. Entwicklungsumgebung einrichten

Android Studio einrichten

Für die ersten Schritte mit der Geospatial API haben wir ein Einstiegsprojekt mit den Grundlagen eines in das Google Maps SDK integrierten ARCore-Projekts bereitgestellt. So erhalten Sie einen schnellen Einstieg in die Geospatial API.

  1. Starten Sie Android Studio und importieren Sie ein Projekt aus VCS.
    • Wenn Sie bereits ein Projekt geöffnet haben, verwenden Sie Datei > Neu > Projekt aus Versionsverwaltung...
    • Wenn das Fenster Welcome to Android Studio (Willkommen bei Android Studio) angezeigt wird, verwenden Sie Get from VCS. Aus VCS-Speicherort abrufen
  2. Wählen Sie Git aus und verwenden Sie die URL https://github.com/google-ar/codelab-geospatial.git, um das Projekt zu importieren.

Google Cloud-Projekt einrichten

Die Geospatial API verwendet Street View-Bilder in Kombination mit dem Magnetometer und den Kamerasensorinformationen des Geräts, um die Ausrichtungswerte zu verbessern. Um diesen Dienst nutzen zu können, müssen Sie ein Google Cloud-Projekt einrichten.

  1. Erstellen Sie ein Projekt in der Google Cloud Console:
    • Informationen dazu finden Sie unter Projekt in der Google Cloud Platform erstellen.
      Google Cloud-Projekt erstellen
    • Geben Sie einen geeigneten Projektnamen ein (z. B. „ARCore Geospatial API-Projekt“) und wählen Sie einen Standort aus.
    • Klicken Sie auf Erstellen.
  2. Aktivieren Sie die erforderlichen APIs:
    • Wählen Sie in der Seitenleiste APIs und Dienste und dann auf Mediathek.
    • Suchen Sie nach der ARCore API.
    • Klicken Sie auf Aktivieren.
    • Kehren Sie zur Bibliothek zurück.
    • Suchen Sie nach dem Maps SDK for Android.
    • Klicken Sie auf Aktivieren.
  3. Anmeldedaten für API-Schlüssel erstellen:
    • Wählen Sie unter APIs und Dienste und wählen Sie Anmeldedaten aus.
    • Klicken Sie in der oberen Leiste auf Anmeldedaten erstellen und wählen Sie dann API-Schlüssel aus.
    • Notieren Sie sich den erstellten Schlüssel für den nächsten Schritt. Kehren Sie zur Seite Anmeldedaten zurück, wenn Sie diese abrufen müssen.

Mit diesen Schritten haben Sie ein Google Cloud-Projekt mit API-Schlüsselautorisierung erstellt und können jetzt die Geospatial API verwenden.

API-Schlüssel in das Android Studio-Projekt einbinden

Um den API-Schlüssel von Google Cloud mit Ihrem Projekt zu verknüpfen, öffnen Sie das Projekt, das Sie in Android Studio erstellt haben, und ändern Sie die API-Schlüssel:

  1. App öffnen > src > AndroidManifest.xml abgeschlossen ist.
  2. Suchen Sie die folgenden meta-data-Einträge:
    <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. Ersetzen Sie PLACEHOLDER_API_KEY durch den API-Schlüssel, den Sie in Ihrem Google Cloud-Projekt erstellt haben.

Mit dem in com.google.android.ar.API_KEY gespeicherten Wert wird die App autorisiert, die Geospatial API zu verwenden. Mit dem in com.google.android.geo.API_KEY gespeicherten Wert wird die App zur Verwendung des Google Maps SDK autorisiert.

Projekt bestätigen

Stellen Sie sicher, dass Ihr Projekt startklar ist. Führen Sie Ihre App in Android Studio aus. Sie sollten die Kameraansicht sowie eine funktionierende Karte unten auf dem Bildschirm sehen.

Textbausteinprojekt

3. Position der Nutzenden bestimmen

In diesem Schritt fügen Sie dem Beispielprojekt Code hinzu, um mit der Geospatial API zu beginnen.

ARCore-Sitzung für die Verwendung der Geospatial API konfigurieren

Wenn Sie Geodaten abrufen möchten, müssen Sie die Geospatial API aktivieren. Ändern Sie GeospatialMode in der Sitzungskonfiguration in ENABLED, indem Sie die Funktion configureSession in HelloGeoActivity.kt ändern:

fun configureSession(session: Session) {
  session.configure(
    session.config.apply {
      // Enable Geospatial Mode.
      geospatialMode = Config.GeospatialMode.ENABLED
    }
  )
}

Der raumbezogene Modus ist ENABLED, die Anwendung kann aber raumbezogene Informationen abrufen.

Daten von der Geospatial API anfordern

Suchen Sie in HelloGeoRenderer.kt nach der folgenden Zeile:

// TODO: Obtain Geospatial information and display it on the map.

Überprüfen Sie darunter, ob das Earth-Objekt zur Nutzung verfügbar ist. Dann hat es trackingState TrackingState.ENABLED.

val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
  // TODO: the Earth object may be used here.
}

Unter TODO können Sie raumbezogene Daten von ARCore anfordern. Diese Zeile hinzufügen:

val cameraGeospatialPose = earth.cameraGeospatialPose

Dadurch erhalten Sie ein GeospatialPose mit diesen Informationen:

  • Standort in Breiten- und Längengrad Außerdem wird eine Schätzung der Standortgenauigkeit angegeben.
  • Höhe und eine Schätzung der Höhengenauigkeit.
  • Überschrift: eine Schätzung der Richtung, in die das Gerät zeigt, und eine Schätzung der Genauigkeit der Ausrichtung.

Positionierungsinformationen auf der Karte anzeigen

Du kannst die in cameraGeospatialPose gespeicherte GeospatialPose verwenden, um eine Markierung auf der Karte zu verschieben, die anzeigt, wo sich der Nutzer befindet. Fahren Sie dort fort, wo Sie aufgehört haben, und fügen Sie Folgendes hinzu:

activity.view.mapView?.updateMapPosition(
  latitude = cameraGeospatialPose.latitude,
  longitude = cameraGeospatialPose.longitude,
  heading = cameraGeospatialPose.heading
)

Dadurch wird die Position der Karte kontinuierlich aktualisiert. Dazu werden Werte aus der Geospatial API verwendet.

Jetzt ausprobieren

Klicken Sie in Android Studio auf Wiedergabe. Halte dein Gerät hoch und bewege es hin und her, damit ARCore das Tracking einrichten kann. Nach kurzer Zeit sollten Sie eine grüne Markierung auf der Karte sehen. Die Markierung dreht sich, während Sie Ihre Umgebung betrachten. Sie sollte auch in die richtige Richtung zeigen: Wenn Ihre Sicht nach Norden zeigt, zeigt der Pfeil auch nach Norden.

Der grüne Pfeil folgt Ihrem Standort und Ihrer Richtung.

4. Anker mithilfe von Erdkoordinaten platzieren

Mit der Geospatial API können Anker an jedem Koordinatenpaar und bei jeder Rotation in der realen Welt platziert werden. So sehen Nutzer beim Besuch bestimmter Orte verankerten Content.

In diesem Schritt fügen Sie eine Möglichkeit zum Positionieren eines Ankers hinzu, indem Sie auf die Karte tippen.

Aktion beim Antippen der Karte festlegen

Das Projekt enthält eine onMapClick-Funktion, die mit einem Breiten- und Längengrad aufgerufen wird, wenn auf das Kartenfragment geklickt wird. Suchen Sie die Funktion onMapClick in HelloGeoRenderer.kt.

Sicherstellen, dass das Earth-Objekt verwendet werden kann

Bevor Sie Anker auf der Erde erstellen, muss der TrackingState-Wert des Erdobjekts TRACKING lauten. Das bedeutet, dass die Position der Erde bekannt ist. Achte außerdem darauf, dass die EarthState auf ENABLED gesetzt ist. Das bedeutet, dass keine Probleme mit der Geospatial API aufgetreten sind. Fügen Sie diese Zeilen innerhalb von onMapClick ein:

val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
  return
}

Positionierung des neuen Ankers bestimmen

Nachdem Sie sich vergewissert haben, dass das Earth-Objekt die Tracking-Funktion aktiviert, trennen Sie die vorherige earthAnchor (falls vorhanden). In den nächsten Schritten ersetzen Sie earthAnchor durch einen neuen Anker:

earthAnchor?.detach()

Verwenden Sie dann cameraGeospatialPose, um die Höhe für den neuen Anker zu bestimmen. Sie können zur Positionierung des Ankers das Koordinatenpaar aus dem Tippen auf die Karte verwenden.

// 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 erstellt eine Anchor, die mit einer gegebenen Rotation auf geodätische Koordinaten fixiert ist. Dieser Anker versucht, stabil und an den angegebenen Koordinaten und der angegebenen Höhe zu bleiben.

Platzieren Sie die Markierung auf der Karte.

Verschieben Sie schließlich eine neue Markierung, die anzeigt, wo die Markierung platziert wurde:

activity.view.mapView?.earthMarker?.apply {
  position = latLng
  isVisible = true
}

Jetzt ausprobieren

Klicken Sie in Android Studio auf Wiedergabe. Halte dein Gerät hoch und bewege es hin und her, damit ARCore das Tracking einrichten kann. Nach kurzer Zeit sollte auf der Karte eine grüne Markierung angezeigt werden, die Ihre aktuelle Position angibt.

Beim Tippen auf die Karte wird die Geospatial API verwendet, um einen Anker zu platzieren, der mit einem realen Standort verknüpft ist. Platzieren Sie den Anker in der Nähe Ihres aktuellen Standorts, damit Sie ihn in der AR-Ansicht sehen können. Er sollte während der Navigation in Ihrer Umgebung stabil bleiben.

Platzieren Sie eine Markierung, indem Sie auf die Karte tippen.

5. Fazit

In diesem Codelab haben Sie gelernt, wie Sie mit der Geospatial API ein einfaches AR-Erlebnis schaffen, das mit der realen Welt verbunden ist.

Platzieren Sie eine Markierung, indem Sie auf die Karte tippen.

Behandelte Themen

  • Hier erfahren Sie, wie Sie ein Google Cloud-Projekt mit aktivierter Geospatial API einrichten.
  • Raumbezogene Daten in einem ARCore-Projekt abrufen und auf einer Karte darstellen
  • Hier erfahren Sie, wie Sie einen Anker mithilfe der geografischen Positionierung in der realen Welt platzieren.

Zusätzliche Ressourcen

Weitere Informationen zu den in diesem Codelab verwendeten geografischen Konzepten und SDKs finden Sie in den folgenden zusätzlichen Ressourcen: