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:
- StreetViewPanoramaBasicDemoActivity: nozioni di base sull'utilizzo di Street View
- StreetViewPanoramaEventsDemoActivity: ascolto degli eventi
- StreetViewPanorama NavigationDemoActivity: controllo di Street View in modo programmatico
- StreetViewPanoramaOptionsDemoActivity: modifica delle opzioni di UI e gesti
- StreetViewPanoramaViewDemoActivity: utilizzo di
StreetViewPanoramaView
(invece di un frammento) - SplitStreetViewPanoramaAndMapDemoActivity: creare un'attività che mostri Street View e una mappa
Esempi di Kotlin:
- StreetViewPanoramaBasicDemoActivity: nozioni di base sull'utilizzo di Street View
- StreetViewPanoramaEventsDemoActivity: ascolto degli eventi
- StreetViewPanorama NavigationDemoActivity: controllo di Street View in modo programmatico
- StreetViewPanoramaOptionsDemoActivity: modifica delle opzioni di UI e gesti
- StreetViewPanoramaViewDemoActivity: utilizzo di
StreetViewPanoramaView
(invece di un frammento) - SplitStreetViewPanoramaAndMapDemoActivity: utilizzare un'attività che mostra un'immagine di Street View e una mappa
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:

In sintesi:
- 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 perActivity
. - Implementa l'interfaccia
OnStreetViewPanoramaReadyCallback
e utilizza il metodo di callbackonStreetViewPanoramaReady(StreetViewPanorama)
per ottenere un handle per l'oggettoStreetViewPanorama
. - 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.
- Se utilizzi un
StreetViewPanoramaFragment
, utilizza il metodo statico di fabbricaStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
per creare il frammento e passare nelle opzioni configurate personalizzate. - Se utilizzi un
StreetViewPanoramaView
, utilizza il costruttoreStreetViewPanoramaView(Context, StreetViewPanoramaOptions)
e trasmetti le opzioni configurate.
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()
:
