Es kann losgehen!

Bevor Sie mit der Entwicklung beginnen, lesen Sie bitte unsere Entwicklerdokumentation.

Die Google Maps Android API aktivieren

Zum Einstieg führen wir Sie durch die Google Developers Console, wo Sie vorab Folgendes tun müssen:

  1. Ein Projekt erstellen oder auswählen
  2. Die Google Maps Android API aktivieren
  3. Zugehörige Schlüssel erstellen
Weiter

Street View

Google Street View stellt 360°-Panoramaansichten von ausgewählten Straßen des gesamten Street View-Abdeckungsbereichs zur Verfügung.

In diesem Video erfahren Sie, wie Sie den Street View-Dienst nutzen können, um Ihren Benutzern ein wirklichkeitsgetreues Bild einer Adresse auf der Karte zu bieten und ihnen aussagekräftige Kontextinformationen zu ihrem Ziel oder Ort ihres Interesses zu liefern.

Die mit Google Maps Android API v2 verfügbare Abdeckung ist identisch mit der Abdeckung für die Google Maps-App auf Ihrem Android-Gerät. Weitere Informationen zu Street View sowie die Darstellung der unterstützten Bereiche auf einer interaktiven Karte finden Sie unter Kurzinfo zu Street View.

Mit der Klasse StreetViewPanorama modellieren Sie das Street View-Panorama in Ihrer Anwendung. Auf Ihrer Benutzeroberfläche wird ein Panorama durch ein Objekt StreetViewPanoramaFragment oder StreetViewPanoramaView dargestellt.

Codebeispiele

Das ApiDemos-Repository auf GitHub enthält Beispiele, die die Verwendung von Street View veranschaulichen:

Übersicht über Street View in Google Maps Android API

Google Maps Android API bietet einen Street View-Dienst zum Beziehen und Bearbeiten der in Google Street View verwendeten Bilder. Bilder werden als Panoramaaufnahmen wiedergegeben.

Jedes Street View-Panorama besteht aus einem oder mehreren Bildern, die eine 360-Grad-Ansicht von einem Standpunkt aus bilden. Die Bilder entsprechen der Equirektangularprojektion (Plate Carrée), die eine 360-Grad-Horizontalsicht (eine volle Drehung) und eine 180-Grad-Vertikalsicht (von ganz oben bis ganz unten) bietet. Das daraus resultierende 360-Grad-Panorama definiert eine Projektion auf einer Kugel, über deren zweidimensionale Fläche das Bild gelegt wird.

StreetViewPanorama bietet ein Anzeigeprogramm, mit dem das Panorama als Kugel mit einer Kamera in ihrem Mittelpunkt wiedergegeben wird. Sie können StreetViewPanoramaCamerabearbeiten, um den Zoom und die Ausrichtung (Neigung und Lage) der Kamera zu steuern.

Erste Schritte

Befolgen Sie den Leitfaden Erste Schritte, um ein Google Maps Android API- Projekt einzurichten. Fügen Sie anschließend ein Street View-Panorama hinzu, wie nachfolgend beschrieben.

Die Kundenbibliothek von Google Play Services SDK enthält einige Street View-Beispiele, die Sie importieren und als Grundlage für Ihre Entwicklung verwenden können. Richtlinien zum Importieren von Beispielen finden Sie in der Einführung.

API verwenden

Befolgen Sie die nachfolgenden Anweisungen, um ein Street View-Panorama zu einem Android-Fragment hinzuzufügen. Dies ist die einfachste Möglichkeit, um Ihre Anwendung um Street View zu ergänzen. Lesen Sie anschließend mehr über Fragmente, Ansichten und die Anpassung des Panoramas.

Street View-Panorama hinzufügen

Zusammenfassung:

  1. Fügen Sie ein Objekt Fragment zu der Aktivität hinzu, in der das Street View-Panorama bearbeitet wird. Die einfachste Möglichkeit besteht darin, ein Element <fragment> zur Layoutdatei für Activity hinzuzufügen.
  2. Implementieren Sie die Schnittstelle OnStreetViewPanoramaReadyCallback und verwenden Sie die Callbackmethode onStreetViewPanoramaReady(StreetViewPanorama), um ein Handle für das Objekt StreetViewPanorama zu erhalten.
  3. Rufen Sie getStreetViewPanoramaAsync() auf dem Fragment auf, um den Callback zu registrieren.

Nachfolgend erhalten Sie ausführlichere Informationen zu den einzelnen Schritten.

Fragmente hinzufügen

Fügen Sie ein Element <fragment> zur Layoutdatei der Aktivität hinzu, um ein Objekt Fragment zu definieren. Setzen Sie in diesem Element das Attribut class auf com.google.android.gms.maps.StreetViewPanoramaFragment (oder SupportStreetViewPanoramaFragment).

Hier sehen Sie ein Beispiel eines Fragments in einer Layoutdatei:

<fragment
    android:name="com.google.android.gms.maps.StreetViewPanoramaFragment"
    android:id="@+id/streetviewpanorama"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Street View-Code hinzufügen

Um mit dem Street View-Panorama in Ihrer App zu arbeiten, müssen Sie die Schnittstelle OnStreetViewPanoramaReadyCallback implementieren und eine Instanz des Callbacks auf einem Objekt StreetViewPanoramaFragment oder StreetViewPanoramaView definieren. Diese Anleitung verwendet ein Objekt StreetViewPanoramaFragment, da dies die einfachste Möglichkeit ist, um Street View zu Ihrer Anwendung hinzuzufügen. Im ersten Schritt implementieren Sie die Callbackschnittstelle:

public class MainActivity extends FragmentActivity
    implements OnStreetViewPanoramaReadyCallback {
...
}

Definieren Sie in der Methode onCreate() Ihrer Activity die Layoutdatei als Content View. Wenn die Layoutdatei den Namen main.xml hat, verwenden Sie diesen Code:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ...
}

Erstellen Sie einen Ziehpunkt zum Fragment, indem Sie FragmentManager.findFragmentById() aufrufen und die Ressourcen-ID Ihres Elements <fragment> übergeben. Beachten Sie, dass die Ressourcen-ID R.id.streetviewpanorama automatisch beim Erstellen der Layoutdatei zum Android-Projekt hinzugefügt wird.

Verwenden Sie dann getStreetViewPanoramaAsync(), um den Callback zum Fragment zu definieren.

StreetViewPanoramaFragment streetViewPanoramaFragment =
    (StreetViewPanoramaFragment) getFragmentManager()
        .findFragmentById(R.id.streetviewpanorama);
streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);

Hinweis: getStreetViewPanoramaAsync() muss aus dem Hauptthread aufgerufen werden, und der Callback wird im Hauptthread ausgeführt. Wenn Google Play-Dienste auf dem Gerät des Benutzers nicht installiert sind, wird der Callback erst ausgelöst, nachdem der Benutzer die Google Play-Dienste installiert hat.

Verwenden Sie die Callback-Methode onStreetViewPanoramaReady(StreetViewPanorama), um eine Nicht-NULL-Instanz von StreetViewPanorama abzurufen, die direkt verwendet werden kann.

@Override
public void onStreetViewPanoramaReady(StreetViewPanorama panorama) {
    panorama.setPosition(new LatLng(-33.87365, 151.20689));
}

Weitere Infos über die Konfiguration des Anfangszustands

Im Gegensatz zu einer Karte kann der Anfangszustand des Street View-Panoramas nicht über XML konfiguriert werden. Sie können das Panorama jedoch programmgesteuert konfigurieren, indem Sie ein Objekt StreetViewPanoramaOptions mit den von Ihnen definierten Optionen übergeben.

mSvpView = new StreetViewPanoramaView(this,
    new StreetViewPanoramaOptions().position(SAN_FRAN));

Weitere Infos zu StreetViewPanoramaFragment

StreetViewPanoramaFragment ist eine Unterklasse der Klasse Android Fragment und ermöglicht Ihnen, ein Street View-Panorama in ein Android-Fragment einzufügen. Objekte vom Typ StreetViewPanoramaFragment fungieren als Container für das Panorama und ermöglichen den Zugriff auf das Objekt StreetViewPanorama.

Hinweis: Google Maps Android API erfordert mindestens API Level 12, damit die Objekte StreetViewPanoramaFragment unterstützt werden. Für Anwendungen älter als API Level 12 können Sie dieselbe Funktion mithilfe der Klasse SupportStreetViewPanoramaFragment realisieren. Außerdem müssen Sie die Android Support-Bibliothek hinzufügen.

Hinweis: Die Verwendung mehrerer Objekte StreetViewPanoramaFragment in einer Aktivität werden von Google Maps Android API nicht unterstützt.

StreetViewPanoramaView

StreetViewPanoramaView ist eine Unterklasse der Android-Klasse View. Mithilfe dieser Unterklasse können Sie ein StreetView-Panorama in eine Android-View einfügen. Eine View repräsentiert einen rechteckigen Bereich des Bildschirms und bildet einen grundlegenden Baustein für Android-Anwendungen und -Widgets. Ganz ähnlich wie StreetViewPanoramaFragment fungiert eine StreetViewPanoramaView als Container für das Panorama und stellt Funktionen über das Objekt StreetViewPanorama bereit. Benutzer dieser Klasse müssen alle Methoden des Aktivitätslebenszyklus (z. B. onCreate(), onDestroy(), onResume() und onPause()) an die entsprechenden Methoden in der Klasse StreetViewPanoramaView weiterleiten.

Hinweis: Die Verwendung mehrerer Objekte StreetViewPanoramaView in einer Aktivität werden von Google Maps Android API nicht unterstützt.

Benutzergesteuerte Funktionen anpassen

Standardmäßig stehen dem Benutzer folgende Funktionen bei der Anzeige von Street View-Panoramaansichten zur Verfügung: Schwenken, Vergrößern und Wechseln zu benachbarten Panoramen. Sie können benutzergesteuerte Gesten mithilfe von Methoden in StreetViewPanorama aktivieren und deaktivieren. Programmgesteuerte Änderungen sind auch nach dem Deaktivieren der Geste weiterhin möglich.

setPanningGesturesEnabled()
Bestimmt, ob der Benutzer in der Lage sein soll, die Kamera durch Ziehen neu auszurichten.
      mSvp.setPanningGesturesEnabled(false);
setUserNavigationEnabled()
Bestimmt, ob der Benutzer in der Lage sein soll, zu einem anderen Panorama zu wechseln. Benutzer können durch einfaches Tippen auf Navigationslinks oder durch Doppeltippen auf die Ansicht zu einer neuen Panoramaansicht wechseln.
      mSvp.setUserNavigationEnabled(false);
setZoomGesturesEnabled()
Bestimmt, ob Zusammendrücken zum Vergrößern für den Benutzer möglich ist.
      mSvp.setZoomGesturesEnabled(false);

Außerdem können Sie festlegen, ob dem Benutzer Straßennamen angezeigt werden.

setStreetNamesEnabled()
Legt fest, ob für den Benutzer auf dem Gelände angezeigte Straßennamen dargestellt werden.
      mSvp.setStreetNamesEnabled(false);

Position des Panoramas festlegen

Um die Position der Street View-Panoramaansicht festzulegen, rufen Sie StreetViewPanorama.setPosition() auf, um einen Wert LatLng zu übergeben. Außerdem können Sie radius als optionalen Parameter übergeben. Ein Radius ist hilfreich, wenn Sie den Bereich, in dem über Street View nach einem passenden Panorama gesucht wird, vergrößern oder verkleinern möchten. Ein Radius 0 bedeutet, dass das Panorama mit exakt dem angegebenen Wert LatLng verknüpft sein muss. Der Standardradius ist 50. Wenn für den Bereich mehrere Panoramen zutreffen, gibt die API das beste Ergebnis zurück.

private static final LatLng SAN_FRAN = new LatLng(37.765927, -122.449972);
mSvp.setPosition(SAN_FRAN);

Alternativ können Sie die Position basierend auf einer Panorama-ID definieren, indem Sie einen Wert panoId an StreetViewPanorama.setPosition() übergeben.

Um eine Panorama-ID für benachbarte Panoramen abzurufen, verwenden Sie zunächst getLocation(), um StreetViewPanoramaLocation abzurufen. Dieses Objekt enthält die ID des aktuellen Panoramas sowie einen Array der Objekte StreetViewPanoramaLink, von denen jedes eine ID eines Panoramas enthält das mit dem aktuellen Panorama verbunden ist.

StreetViewPanoramaLocation location = mSvp.getLocation();
if (location != null && location.links != null) {
    mSvp.setPosition(location.links[0].panoId);
}

Vergrößern und Verkleinern

Sie können die Vergrößerungsstufe programmgesteuert ändern, indem Sie StreetViewPanoramaCamera.zoom definieren. Durch Festlegen der Vergrößerungsstufe 1,0 wird das Bild um den Faktor 2 vergrößert.

Im nachfolgenden Codeausschnitt wird StreetViewPanoramaCamera.Builder() verwendet, um eine neue Kamera mit derselben Neigung und Lage wie die vorhandene Kamera und einer um fünfzig Prozent erhöhten Vergrößerung zu konstruieren.

private static final float ZOOM_BY = 0.5f;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(mSvp.getPanoramaCamera().zoom + ZOOM_BY)
    .tilt(mSvp.getPanoramaCamera().tilt)
    .bearing(mSvp.getPanoramaCamera().bearing)
    .build();

Kameraausrichtung (Point-of-View) festlegen

Sie können die Ausrichtung der Street View-Kamera bestimmen, indem Sie die Lage und Neigung für StreetViewPanoramaCamera festlegen.

Lage
Die Richtung, in die die Kamera zeigt, angegeben in Grad im Uhrzeigersinn vom geografischen Norden um den geometrischen Kameraort. Der geografische Norden ist 0, Osten 90, Süden 180 und Westen 270.
Neigung
Die Neigung der Y-Achse nach oben oder unten. Der Bereich reicht von -90 über 0 bis 90, wobei -90 senkrecht nach unten, 0 zentriert am Horizont und 90 senkrecht nach oben bedeutet. Die Abweichung wird vom Standardneigungswinkel der Kamera aus gemessen, der häufig (aber nicht immer) flach horizontal ist. Ein Bild, das auf einem Berg aufgenommen wurde, wird vermutlich einen Standardneigungswinkel haben, der nicht horizontal ist.

Im nachfolgenden Codeausschnitt wird StreetViewPanoramaCamera.Builder() verwendet, um eine neue Kamera mit derselben Vergrößerung und Neigung wie die vorhandene Kamera und einer um 30 Grad nach links veränderten Lage zu konstruieren.

private static final int PAN_BY = 30;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(mSvp.getPanoramaCamera().zoom)
    .tilt(mSvp.getPanoramaCamera().tilt)
    .bearing(mSvp.getPanoramaCamera().bearing - PAN_BY)
    .build();

Im nachfolgenden Codeausschnitt wird die Kamera um 30 Grad nach oben geneigt.

float tilt = mSvp.getPanoramaCamera().tilt + 30;
tilt = (tilt > 90) ? 90 : tilt;

StreetViewPanoramaCamera previous = mSvp.getPanoramaCamera();

StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder(previous)
    .tilt(tilt)
    .build();

Kamerabewegungen animieren

Um die Kamerabewegungen zu animieren, rufen Sie StreetViewPanorama.animateTo() auf. Die Animation interpoliert zwischen den aktuellen und den neuen Kameraattributen. Um direkt und ohne Animation zur Kamera zu springen, können Sie die Dauer mit 0 festlegen.

// Set the tilt to zero, keeping the zoom and bearing at current values.
// Animate over a duration of 500 milliseconds.
long duration = 500;
float tilt = 0;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(mSvp.getPanoramaCamera().zoom)
    .bearing(mSvp.getPanoramaCamera().bearing)
    .tilt(tilt)
    .build();

mSvp.animateTo(camera, duration);

Feedback geben zu...

Google Maps Android API
Google Maps Android API