Google Street View offre viste panoramiche a 360 gradi da strade designate in tutta l'area di copertura.
Questo video mostra come utilizzare il servizio Street View per offrire agli utenti un'esperienza nel mondo reale di un indirizzo sulla mappa, fornendo loro un contesto significativo sulla loro destinazione o su qualsiasi luogo a cui sono interessati.
La copertura disponibile tramite l'API Android v2 di Google Maps è la stessa dell'app Google Maps sul tuo dispositivo Android. Per saperne di più su Street View e vedere le aree supportate su una mappa interattiva, consulta Informazioni su Street View.
La classe StreetViewPanorama
modella la panoramica
Street View nella tua applicazione. All'interno della UI, 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 Java:
- StreetViewPanoramaBasicDemoActivity: nozioni di base sull'utilizzo di Street View
- StreetViewPanoramaEventsDemoActivity: ascolto di eventi
- Street ViewPanoramaNavigazioneDemoActivity: controllo delle panoramiche di Street View in modo programmatico
- StreetViewPanoramaOptionsDemoActivity: modifica dell'interfaccia utente e delle opzioni dei gesti
- StreetViewPanoramaViewDemoActivity: utilizzo di
StreetViewPanoramaView
(anziché un frammento) - SplitStreetViewPanoramaAndMapDemoActivity: creazione di un'attività che mostri un'immagine Street View e una mappa
Esempi di Kotlin:
- StreetViewPanoramaBasicDemoActivity: nozioni di base sull'utilizzo di Street View
- StreetViewPanoramaEventsDemoActivity: ascolto di eventi
- Street ViewPanoramaNavigazioneDemoActivity: controllo delle panoramiche di Street View in modo programmatico
- StreetViewPanoramaOptionsDemoActivity: modifica dell'interfaccia utente e delle opzioni dei gesti
- StreetViewPanoramaViewDemoActivity: utilizzo di
StreetViewPanoramaView
(anziché un frammento) - SplitStreetViewPanoramaAndMapDemoActivity: utilizzo di un'attività che mostra un'immagine Street View e una mappa
Panoramica di Street View in Maps SDK for Android
Maps SDK for Android fornisce un servizio Street View che consente di ottenere e manipolare le immagini utilizzate in Google Street View. Le immagini vengono restituite come panorami.
Ogni panoramica di Street View è un'immagine, o un insieme di immagini, che fornisce una visione completa a 360 gradi da una singola posizione. Le immagini si adattano alla proiezione equirettangolare (Plate Carrée), che contiene 360 gradi di visualizzazione orizzontale (tutto intorno a 360 gradi) e 180 gradi di visualizzazione verticale (da dritta verso il basso). La panoramica a 360° risultante definisce una proiezione su una sfera con l'immagine avvolta sulla superficie bidimensionale di quella sfera.
StreetViewPanorama
consente di visualizzare il panorama
come una sfera, con una fotocamera al centro. Puoi manipolare la StreetViewPanoramaCamera
per controllare lo zoom e l'orientamento (inclinazione e orientamento) della fotocamera.
Inizia
Configura un progetto
Segui la guida introduttiva per configurare un SDK di Maps per il progetto Android.
Verifica la disponibilità della panoramica di Street View prima di aggiungere una panoramica
La libreria client dell'SDK di Google Play Services include alcuni esempi di Street View che puoi importare nel progetto e utilizzare come base per lo sviluppo. Consulta l'introduzione per le linee guida sull'importazione dei campioni.
La libreria di utilità di Maps SDK for Android
è una libreria open source di classi utili per una serie di
applicazioni. Nel repository GitHub è inclusa l'utilità per i metadati di Street View.
Questa utilità verifica se una località è supportata da Street View. Per evitare errori quando aggiungi un panorama Street View a un'app per Android, richiama questa utilità per i metadati e aggiungi un panorama Street View solo se la risposta è OK
.
Utilizzare l'API
Segui le istruzioni riportate di seguito per aggiungere una panoramica Street View a un frammento Android. Questo è il modo più semplice per aggiungere Street View alla tua applicazione. Poi scopri di più su frammenti, visualizzazioni e personalizzazione della panoramica.
Aggiungere una panoramica di Street View
Per aggiungere una panoramica di Street View come questa:

In sintesi:
- Aggiungi un oggetto Frammento all'attività
che gestirà la panoramica 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
. - Chiama
getStreetViewPanoramaAsync()
sul frammento per registrare il callback.
Di seguito sono riportati ulteriori dettagli su ogni 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
).
Di seguito è riportato 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 codice Street View
Per lavorare con il panorama di Street View all'interno dell'app, dovrai implementare
l'interfaccia OnStreetViewPanoramaReadyCallback
e impostare un'istanza del callback su un oggetto
StreetViewPanoramaFragment
o
StreetViewPanoramaView
. Questo tutorial utilizza un StreetViewPanoramaFragment
, che è il modo più semplice per aggiungere Street View alla tua app. Il primo passaggio consiste nell'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 nome del file di layout
è 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) }
Per ottenere un handle per il frammento, chiama
FragmentManager.findFragmentById()
,
passandogli l'ID risorsa del tuo elemento <fragment>
.
Tieni presente che l'ID risorsa R.id.streetviewpanorama
viene aggiunto automaticamente al progetto Android quando crei il file di layout.
Quindi utilizza 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 Street View tramite XML. Tuttavia, puoi configurare la panoramica in modo programmatico passando un oggetto StreetViewPanoramaOptions
contenente le opzioni specificate.
- Se utilizzi un
StreetViewPanoramaFragment
, usa il metodo di fabbrica statico diStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
per creare il frammento e trasmettere le tue opzioni configurate personalizzate. - Se utilizzi un
StreetViewPanoramaView
, utilizza il costruttoreStreetViewPanoramaView(Context, StreetViewPanoramaOptions)
e trasmetti le opzioni configurate personalizzate.
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) )
Altro su StreetViewPanoramaFragment
StreetViewPanoramaFragment
è una sottoclasse della classe Android Fragment e consente di inserire una panoramica di Street View in un frammento Android. Gli oggetti StreetViewPanoramaFragment
fungono da
contenitori per la panoramica e forniscono l'accesso all'oggetto StreetViewPanorama
.
Vista panoramica Street View
StreetViewPanoramaView
, una sottoclasse della classe View
Android, consente di posizionare una panoramica di Street View in una View
Android. Un elemento View
rappresenta un'area rettangolare dello schermo ed è un componente di base fondamentale per le app e i widget Android.
Analogamente a 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 delle attività (come onCreate()
, onDestroy()
, onResume()
e onPause())
ai metodi corrispondenti nella classe StreetViewPanoramaView
.
Personalizzare la funzionalità controllata dall'utente
Per impostazione predefinita, l'utente può usufruire delle seguenti funzionalità durante la visualizzazione della panoramica Street View: panoramica, zoom e viaggio verso panoramiche adiacenti. Puoi attivare e disattivare i gesti controllati dall'utente
tramite metodi su StreetViewPanorama
. Quando il gesto è disattivato, le modifiche programmatiche sono comunque possibili.
Imposta la posizione della panoramica
Per impostare la posizione del panorama di Street View, chiama
StreetViewPanorama.setPosition()
, passando un LatLng
.
Puoi anche trasmettere radius
e source
come parametri facoltativi.
Il raggio è utile se vuoi ampliare o restringere l'area in cui Street View cercherà una panoramica corrispondente. Un raggio pari a 0 indica che il panorama deve essere collegato esattamente all'elemento LatLng
specificato.
Il raggio predefinito è di 50 metri. Se nell'area corrispondente sono presenti più panoramiche, l'API restituirà la corrispondenza migliore.
La sorgente è utile se vuoi limitare la ricerca a Street View solo delle panoramiche all'aperto. Per impostazione predefinita, i panorami di Street View potrebbero trovarsi all'interno di luoghi come musei, edifici pubblici, bar e attività. Tieni presente che i panorami esterni potrebbero non esistere per la località specificata.
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 all'ID di un panorama passando un
panoId
a StreetViewPanorama.setPosition()
.
Per recuperare l'ID panoramica per panoramiche adiacenti, utilizza prima
getLocation()
per recuperare un StreetViewPanoramaLocation
.
Questo oggetto contiene l'ID della panoramica corrente e un array di oggetti StreetViewPanoramaLink
, ciascuno dei quali contiene l'ID di una panoramica collegata a quella corrente.
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 verrà ingrandita di un fattore 2.
Lo snippet riportato di seguito utilizza StreetViewPanoramaCamera.Builder()
per costruire una
nuova videocamera con l'inclinazione e l'orientamento della videocamera 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()
Imposta l'orientamento della fotocamera (punto di vista)
Puoi determinare l'orientamento della fotocamera di Street View impostando
il cuscinetto e l'inclinazione su StreetViewPanoramaCamera
.
- bearing
- La direzione in cui punta la fotocamera, specificata in gradi in senso orario dal nord vero, intorno al luogo della fotocamera. Il vero nord è 0, l'est 90, il sud 180, l'ovest 270.
- inclinazione
- L'inclinazione dell'asse Y 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 a partire dall'inclinazione predefinita iniziale della fotocamera, che è spesso (ma non sempre) orizzontale. Ad esempio, un'immagine scattata su una collina probabilmente avrà un'inclinazione predefinita non orizzontale.
Lo snippet seguente utilizza StreetViewPanoramaCamera.Builder()
per creare una nuova videocamera con lo zoom e l'inclinazione della videocamera esistente, modificando 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()
Lo snippet seguente inclina la videocamera verso l'alto di 30 gradi.
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()
Anima i movimenti della videocamera
Per animare i movimenti della videocamera, chiama
StreetViewPanorama.animateTo()
.
L'animazione si interpola tra gli attributi della videocamera correnti e i nuovi
attributi della videocamera. 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)
La seguente immagine mostra il risultato quando pianifichi l'esecuzione dell'animazione sopra riportata ogni 2000 millisecondi utilizzando Handler.postDelayed()
:
