Street View

Seleziona la piattaforma: Android iOS JavaScript

Google Street View offre viste panoramiche a 360° di strade designate sull'intera area di copertura.

Questo video mostra come utilizzare il servizio Street View per offrire ai tuoi utenti un'esperienza reale di un indirizzo sulla mappa, che fornisce loro un contesto significativo sulla destinazione o sul luogo a cui sono interessati.

La copertura disponibile tramite l'API Google Maps per Android v2 è la stessa disponibile per l'app Google Maps sul tuo dispositivo Android. Per saperne di più su Street View e visualizzare le aree supportate su una mappa interattiva, consulta Informazioni su Street View.

La classe StreetViewPanorama modella la panoramica di Street View nella tua applicazione. All'interno dell'interfaccia utente, una panoramica è rappresentata da un oggetto StreetViewPanoramaFragment o StreetViewPanoramaView.

Esempi di codice

Il repository apiDemos su GitHub include esempi che dimostrano l'uso di Street View.

Esempi di Java:

Esempi di Kotlin:

Panoramica di Street View nell'SDK di Maps per Android

L'SDK di Maps per Android fornisce un servizio di Street View per ottenere e manipolare le immagini utilizzate in Google Street View. Le immagini vengono restituite come panorami.

Ogni panorama di Street View è costituito da un'immagine o da un insieme di immagini che offre una visualizzazione completa a 360 gradi da una singola posizione. Le immagini sono conformi alla proiezione equirettangolare (Plate Carrée), che contiene 360 gradi di vista orizzontale (arrotondamento completo) e 180 gradi di visuale verticale (dal dritto verso l'alto). La panoramica a 360° risultante definisce una proiezione su una sfera con l'immagine avvolta nella superficie bidimensionale.

StreetViewPanorama offre un visualizzatore che esegue il rendering del panorama come una sfera con una fotocamera al centro. Puoi manipolare l'StreetViewPanoramaCamera per controllare lo zoom e l'orientamento (inclinazione e rilevamento) della fotocamera.

Inizia

Segui la guida introduttiva per configurare un progetto Maps SDK for Android. poi aggiungi una panoramica di Street View, come descritto di seguito.

La libreria client dell'SDK di Google Play Services include alcuni esempi di Street View che puoi importare nel tuo progetto e utilizzare come base per lo sviluppo. Consulta l'introduzione per le linee guida sull'importazione degli esempi.

Utilizzare l'API

Segui le istruzioni riportate di seguito per aggiungere un panorama Street View a un frammento Android. Si tratta del modo più semplice per aggiungere Street View alla tua applicazione. Poi scopri di più su frammenti, viste e personalizza il panorama.

Aggiungere una panoramica di Street View

Segui i passaggi indicati di seguito per aggiungere una panoramica di Street View come questa:

Demo panoramica Street View

In sintesi:

  1. Aggiungi un oggetto Frammento all'Attività che gestirà la panoramica di Street View. Il modo più semplice per farlo è aggiungere un elemento <fragment> al file di layout per Activity.
  2. Implementa l'interfaccia OnStreetViewPanoramaReadyCallback e utilizza il metodo di callback onStreetViewPanoramaReady(StreetViewPanorama) per ottenere un handle per l'oggetto StreetViewPanorama.
  3. Richiama getStreetViewPanoramaAsync() sul frammento per registrare il callback.

Di seguito sono riportate ulteriori informazioni su ciascun passaggio.

Aggiungi un frammento

Aggiungi un elemento <fragment> al file di layout dell'attività per definire un oggetto Frammento. In questo elemento, imposta l'attributo class su com.google.android.gms.maps.StreetViewPanoramaFragment (o SupportStreetViewPanoramaFragment).

Ecco un esempio di frammento in un file di layout:

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

Aggiungi il codice Street View

Per utilizzare la panoramica di Street View all'interno dell'app, devi implementare l'interfaccia OnStreetViewPanoramaReadyCallback e impostare un'istanza di callback su un oggetto StreetViewPanoramaFragment o StreetViewPanoramaView. Questo tutorial utilizza un elemento StreetViewPanoramaFragment, perché è il modo più semplice per aggiungere Street View alla tua app. Il primo passo è implementare l'interfaccia di callback:

Java


class StreetViewActivity extends AppCompatActivity implements OnStreetViewPanoramaReadyCallback {
    // ...
}

      

Kotlin


class StreetViewActivity : AppCompatActivity(), OnStreetViewPanoramaReadyCallback {
    // ...
}

      

Nel metodo onCreate() di Activity, imposta il file di layout come visualizzazione dei contenuti. Ad esempio, se il file di layout ha il nome main.xml, utilizza questo codice:

Java


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_street_view);
    SupportStreetViewPanoramaFragment streetViewPanoramaFragment =
        (SupportStreetViewPanoramaFragment) getSupportFragmentManager()
            .findFragmentById(R.id.street_view_panorama);
    streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);
}

      

Kotlin


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_street_view)
    val streetViewPanoramaFragment =
        supportFragmentManager
            .findFragmentById(R.id.street_view_panorama) as SupportStreetViewPanoramaFragment
    streetViewPanoramaFragment.getStreetViewPanoramaAsync(this)
}

      

Ricevi un handle al frammento chiamando FragmentManager.findFragmentById(), trasmettendolo l'ID risorsa del tuo elemento <fragment>. Tieni presente che l'ID risorsa R.id.streetviewpanorama viene aggiunto automaticamente al progetto Android durante la creazione del file di layout.

quindi usa getStreetViewPanoramaAsync() per impostare il callback sul frammento.

Java


SupportStreetViewPanoramaFragment streetViewPanoramaFragment =
    (SupportStreetViewPanoramaFragment) getSupportFragmentManager()
        .findFragmentById(R.id.street_view_panorama);
streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);

      

Kotlin


val streetViewPanoramaFragment =
    supportFragmentManager
        .findFragmentById(R.id.street_view_panorama) as SupportStreetViewPanoramaFragment
streetViewPanoramaFragment.getStreetViewPanoramaAsync(this)

      

Utilizza il metodo di callback onStreetViewPanoramaReady(StreetViewPanorama) per recuperare un'istanza non null di StreetViewPanorama, pronta per essere utilizzata.

Java


@Override
public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) {
    LatLng sanFrancisco = new LatLng(37.754130, -122.447129);
    streetViewPanorama.setPosition(sanFrancisco);
}

      

Kotlin


override fun onStreetViewPanoramaReady(streetViewPanorama: StreetViewPanorama) {
    val sanFrancisco = LatLng(37.754130, -122.447129)
    streetViewPanorama.setPosition(sanFrancisco)
}

      

Scopri di più sulla configurazione dello stato iniziale

A differenza di una mappa, non è possibile configurare lo stato iniziale della panoramica di Street View tramite XML. Tuttavia, puoi configurare la panoramica in modo programmatico passando un oggetto StreetViewPanoramaOptions contenente le opzioni specificate.

Java


LatLng sanFrancisco = new LatLng(37.754130, -122.447129);
StreetViewPanoramaView view = new StreetViewPanoramaView(this,
    new StreetViewPanoramaOptions().position(sanFrancisco));

      

Kotlin


val sanFrancisco = LatLng(37.754130, -122.447129)
val view = StreetViewPanoramaView(
    this,
    StreetViewPanoramaOptions().position(sanFrancisco)
)

      

Scopri di più su StreetViewPanoramaFragment

StreetViewPanoramaFragment è una sottoclasse della classe Android Fragment e consente di inserire una panoramica Street View in un frammento Android. Gli oggetti StreetViewPanoramaFragment fungono da container per la panoramica e forniscono accesso all'oggetto StreetViewPanorama.

Panorama Street View

StreetViewPanoramaView, una sottoclasse della classe Android View, ti consente di posizionare una panoramica di Street View in una View per Android. Un View è un'area rettangolare dello schermo ed è un componente di base per le app Android e i widget. Proprio come un StreetViewPanoramaFragment, StreetViewPanoramaView funge da contenitore per la panoramica, esponendo le funzionalità di base tramite l'oggetto StreetViewPanorama. Gli utenti di questa classe devono inoltrare tutti i metodi del ciclo di vita dell'attività (ad esempio, onCreate(), onDestroy(), onResume() e onPause()) ai metodi corrispondenti nella classe StreetViewPanoramaView.

Personalizzare la funzionalità controllata dall'utente

Per impostazione predefinita, l'utente ha a disposizione la seguente funzionalità per la panoramica di Street View: panoramica, zoom e spostamento in panoramiche adiacenti. Puoi attivare e disattivare i gesti controllati dall'utente tramite i metodi su StreetViewPanorama. Le modifiche programmatiche sono ancora possibili quando il gesto è disattivato.

Imposta la posizione della panoramica

Per impostare la posizione del panorama Street View, chiama StreetViewPanorama.setPosition(), passando un LatLng. Puoi anche passare radius e source come parametri facoltativi.

Un raggio è utile se vuoi ampliare o restringere l'area in cui Street View cerca una panoramica corrispondente. Un raggio pari a 0 indica che la panoramica deve essere collegata esattamente al valore LatLng specificato. Il raggio predefinito è di 50 metri. Se nell'area di corrispondenza è presente più di una panoramica, l'API restituirà la corrispondenza migliore.

Un'origine è utile se vuoi impedire a Street View di cercare solo le panoramiche all'aperto. Per impostazione predefinita, le panoramiche di Street View si trovano in musei, edifici pubblici, caffè e attività commerciali. Tieni presente che potrebbero non esistere panoramiche esterne per il luogo specificato.

Java


LatLng sanFrancisco = new LatLng(37.754130, -122.447129);

// Set position with LatLng only.
streetViewPanorama.setPosition(sanFrancisco);

// Set position with LatLng and radius.
streetViewPanorama.setPosition(sanFrancisco, 20);

// Set position with LatLng and source.
streetViewPanorama.setPosition(sanFrancisco, StreetViewSource.OUTDOOR);

// Set position with LaLng, radius and source.
streetViewPanorama.setPosition(sanFrancisco, 20, StreetViewSource.OUTDOOR);

      

Kotlin


val sanFrancisco = LatLng(37.754130, -122.447129)

// Set position with LatLng only.
streetViewPanorama.setPosition(sanFrancisco)

// Set position with LatLng and radius.
streetViewPanorama.setPosition(sanFrancisco, 20)

// Set position with LatLng and source.
streetViewPanorama.setPosition(sanFrancisco, StreetViewSource.OUTDOOR)

// Set position with LaLng, radius and source.
streetViewPanorama.setPosition(sanFrancisco, 20, StreetViewSource.OUTDOOR)

      

In alternativa, puoi impostare la località in base a un ID panoramica passando un panoId a StreetViewPanorama.setPosition().

Per recuperare l'ID della panoramica per le viste adiacenti, utilizza prima getLocation() per recuperare un elemento StreetViewPanoramaLocation. Questo oggetto contiene l'ID della panoramica corrente e un array di oggetti StreetViewPanoramaLink, ognuno dei quali contiene l'ID di una panoramica collegata a quella attuale.

Java


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

      

Kotlin


streetViewPanorama.location.links.firstOrNull()?.let { link: StreetViewPanoramaLink ->
    streetViewPanorama.setPosition(link.panoId)
}

      

Aumentare e diminuire lo zoom

Puoi modificare il livello di zoom in modo programmatico impostando StreetViewPanoramaCamera.zoom. Impostando lo zoom su 1.0, l'immagine viene ingrandita di un fattore 2.

Lo snippet che segue utilizza StreetViewPanoramaCamera.Builder() per creare una nuova fotocamera con l'inclinazione e il supporto della fotocamera esistente, aumentando al contempo lo zoom del cinquanta percento.

Java


float zoomBy = 0.5f;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(streetViewPanorama.getPanoramaCamera().zoom + zoomBy)
    .tilt(streetViewPanorama.getPanoramaCamera().tilt)
    .bearing(streetViewPanorama.getPanoramaCamera().bearing)
    .build();

      

Kotlin


val zoomBy = 0.5f
val camera = StreetViewPanoramaCamera.Builder()
    .zoom(streetViewPanorama.panoramaCamera.zoom + zoomBy)
    .tilt(streetViewPanorama.panoramaCamera.tilt)
    .bearing(streetViewPanorama.panoramaCamera.bearing)
    .build()

      

Impostare l'orientamento della fotocamera (punto di vista)

Puoi determinare l'orientamento della fotocamera Street View impostando il cuscinetto e l'inclinazione su StreetViewPanoramaCamera.

bearing
La direzione in cui si trova la fotocamera, specificata in gradi in senso orario dal vero nord, intorno al locus della fotocamera. Il nord vero è 0, l'est è 90, il sud è 180, l'ovest è 270.
Inclinazione
L'asse Y si inclina verso l'alto o verso il basso. L'intervallo va da -90 a 0-90, con -90 rivolto verso il basso, 0 centrato sull'orizzonte e 90 rivolto verso l'alto. La varianza viene misurata in base al tono predefinito iniziale della videocamera, che è spesso (ma non sempre) orizzontale. Ad esempio, un'immagine scattata in collina probabilmente avrà un tono predefinito non orizzontale.

Lo snippet che segue utilizza StreetViewPanoramaCamera.Builder() per creare una nuova videocamera con lo zoom e l'inclinazione della videocamera esistente, cambiando al contempo il cuscinetto di 30 gradi verso sinistra.

Java


float panBy = 30;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(streetViewPanorama.getPanoramaCamera().zoom)
    .tilt(streetViewPanorama.getPanoramaCamera().tilt)
    .bearing(streetViewPanorama.getPanoramaCamera().bearing - panBy)
    .build();

      

Kotlin


val panBy = 30f
val camera = StreetViewPanoramaCamera.Builder()
    .zoom(streetViewPanorama.panoramaCamera.zoom)
    .tilt(streetViewPanorama.panoramaCamera.tilt)
    .bearing(streetViewPanorama.panoramaCamera.bearing - panBy)
    .build()

      

Il seguente snippet inclina la videocamera di 30 gradi verso l'alto.

Java


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

StreetViewPanoramaCamera previous = streetViewPanorama.getPanoramaCamera();

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

      

Kotlin


var tilt = streetViewPanorama.panoramaCamera.tilt + 30
tilt = if (tilt > 90) 90f else tilt
val previous = streetViewPanorama.panoramaCamera
val camera = StreetViewPanoramaCamera.Builder(previous)
    .tilt(tilt)
    .build()

      

Animazione dei movimenti della videocamera

Per animare i movimenti della videocamera, chiama StreetViewPanorama.animateTo(). L'animazione interpola tra gli attributi della fotocamera corrente e quelli nuovi. Se vuoi passare direttamente alla videocamera senza animazione, puoi impostare la durata su 0.

Java


// Keeping the zoom and tilt. Animate bearing by 60 degrees in 1000 milliseconds.
long duration = 1000;
StreetViewPanoramaCamera camera =
    new StreetViewPanoramaCamera.Builder()
        .zoom(streetViewPanorama.getPanoramaCamera().zoom)
        .tilt(streetViewPanorama.getPanoramaCamera().tilt)
        .bearing(streetViewPanorama.getPanoramaCamera().bearing - 60)
        .build();
streetViewPanorama.animateTo(camera, duration);

      

Kotlin


// Keeping the zoom and tilt. Animate bearing by 60 degrees in 1000 milliseconds.
val duration: Long = 1000
val camera = StreetViewPanoramaCamera.Builder()
    .zoom(streetViewPanorama.panoramaCamera.zoom)
    .tilt(streetViewPanorama.panoramaCamera.tilt)
    .bearing(streetViewPanorama.panoramaCamera.bearing - 60)
    .build()
streetViewPanorama.animateTo(camera, duration)

      

L'immagine seguente mostra il risultato quando pianifichi l'esecuzione dell'animazione precedente ogni 2000 millisecondi, utilizzando Handler.postDelayed():

Demo dell&#39;animazione panoramica di Street View