Vous êtes prêt !

Pour passer à l'étape de développement, accédez à notre documentation pour les développeurs.

Activer Google Maps Android API

Pour commencer, nous allons vous guider à travers la console Google Developers et effectuer deux ou trois petites choses :

  1. Créer ou choisir un projet
  2. Activer Google Maps Android API
  3. Créer les clés appropriées
Continuer

Street View

Google Street View offre des vues panoramiques à 360 degrés à partir des routes sélectionnées dans sa zone de couverture.

Cette vidéo vous montre comment utiliser le service Street View afin d'offrir à vos utilisateurs une expérience réaliste à partir d'une adresse sur la carte, en leur fournissant un contexte utile sur leur destination ou n'importe quel lieu qui les intéresse.

La couverture disponible via Google Maps Android API v2 est identique à celle de l'application Google Maps de votre appareil Android. Pour en savoir plus sur Street View et voir les zones prises en charge sur une carte interactive, voir À propos de Street View.

La classe StreetViewPanorama modélise le panorama Street View dans votre application. Dans votre interface utilisateur, un panorama est représenté par un objet StreetViewPanoramaFragment ou StreetViewPanoramaView.

Échantillons de code

Le référentiel ApiDemos sur GitHub inclut des échantillons qui montrent comment utiliser Street View :

Présentation de Street View dans Google Maps Android API

Google Maps Android API fournit un service Street View permettant d'obtenir et de manipuler les images utilisées dans Google Street View. Les images sont renvoyées sous forme de panoramas.

Chaque panorama Street View est une image, ou une série d'images, représentant une vue complète à 360 degrés d'un même lieu. Les images sont compatibles avec la projection des cartes plates carrées, qui contient une vue horizontale à 360 degrés (tour d'horizon complet) et une vue verticale à 180 degrés (du zénith au nadir). Le panorama à 360 degrés ainsi obtenu définit une projection sur une sphère, l'image recouvrant la surface à deux dimensions de cette sphère.

StreetViewPanorama fournit une visionneuse qui affiche le panorama sous la forme d'une sphère avec un appareil photo en son centre. Vous pouvez manipuler StreetViewPanoramaCamera pour contrôler le zoom et l'orientation (inclinaison et direction) de l'appareil photo.

Premiers pas

Suivez le guide de démarrage pour configurer un projet Google Maps Android API. Puis ajoutez un panorama Street View, comme décrit ci-dessous.

La bibliothèque client du SDK des services Google Play inclut quelques échantillons Street View que vous pouvez importer dans votre projet et utiliser comme base pour le développement. Voir l'introduction pour obtenir des instructions sur l'importation des échantillons.

Utiliser l'API

Suivez les instructions ci-dessous pour ajouter un panorama Street View à un fragment Android. C'est le moyen le plus simple d'ajouter Street View à votre application. Lisez ensuite plus d'informations sur les fragments, les vues et la personnalisation du panorama.

Ajouter un panorama Street View

En résumé :

  1. Ajoutez un objet Fragment à l'Activité qui va gérer le panorama Street View. Le plus simple est alors d'ajouter un élément <fragment> au fichier de disposition de l'activité Activity.
  2. Implémentez l'interface OnStreetViewPanoramaReadyCallback et utilisez la méthode de rappel onStreetViewPanoramaReady(StreetViewPanorama) pour obtenir un handle vers l'objet StreetViewPanorama.
  3. Appelez getStreetViewPanoramaAsync() sur le fragment pour inscrire le rappel.

Vous trouverez ci-dessous des informations plus détaillées sur chaque étape.

Ajouter un fragment

Ajoutez un élément <fragment> au fichier de disposition de l'activité afin de définir un objet Fragment. Dans cet élément, définissez l'attribut class sur com.google.android.gms.maps.StreetViewPanoramaFragment (ou SupportStreetViewPanoramaFragment).

Voici un exemple de fragment dans un fichier de disposition :

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

Ajouter un code Street View

Pour utiliser le panorama Street View au sein de votre application, vous devez implémenter l'interface OnStreetViewPanoramaReadyCallback et définir une instance du rappel sur un objet StreetViewPanoramaFragment ou StreetViewPanoramaView. Ce didacticiel utilise un StreetViewPanoramaFragment, car c'est le moyen le plus simple d'ajouter Street View à votre application. La première étape consiste à implémenter l'interface de rappel :

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

Dans la méthode onCreate() de votre Activity, définissez le fichier de disposition en tant que vue de contenu. Par exemple, si le fichier de disposition porte le nom main.xml, utilisez ce code :

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

Obtenez un handle vers le fragment en appelant FragmentManager.findFragmentById(), en lui spécifiant l'identifiant de ressource de votre élément <fragment>. Notez que l'identifiant de ressource R.id.streetviewpanorama est ajouté automatiquement au projet Android lors de la création du fichier de disposition.

Utilisez ensuite getStreetViewPanoramaAsync() pour définir le rappel sur le fragment.

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

Remarque : getStreetViewPanoramaAsync() doit être appelé à partir du thread principal et le rappel sera exécuté dans le thread principal. Si les services Google Play ne sont pas installés sur l'appareil de l'utilisateur, le rappel ne sera pas déclenché tant que l'utilisateur ne les aura pas installés.

Utilisez la méthode de rappel onStreetViewPanoramaReady(StreetViewPanorama) pour extraire une instance non nulle de StreetViewPanorama, prête à être utilisée.

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

Informations supplémentaires sur la configuration de l'état initial

Contrairement à une carte, il n'est pas possible de configurer l'état initial du panorama Street View via XML. Vous pouvez toutefois configurer le panorama par programmation en spécifiant un objet StreetViewPanoramaOptions contenant vos options spécifiées.

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

Informations supplémentaires sur StreetViewPanoramaFragment

StreetViewPanoramaFragment est une sous-classe de la classe Android Fragment qui vous permet de placer un panorama Street View dans un fragment Android. Les objets StreetViewPanoramaFragment jouent le rôle de conteneurs pour le panorama et fournissent un accès à l'objet StreetViewPanorama.

Remarque : Google Maps Android API requiert l'API niveau 12 ou supérieur pour la prise en charge des objets StreetViewPanoramaFragment. Si vous ciblez une application antérieure à l'API niveau 12, vous pouvez accéder à la même fonctionnalité via la classe SupportStreetViewPanoramaFragment. Vous devez également inclure la bibliothèque de support Android.

Remarque : Google Maps Android API ne prend pas en charge plusieurs objets StreetViewPanoramaFragment dans une même activité.

StreetViewPanoramaView

StreetViewPanoramaView, une sous-classe de la classe Android View, vous permet de placer un panorama Street View dans une vue Android (View). Une View représente une zone rectangulaire de l'écran, et est une composante fondamentale des applications et widgets Android. À l'instar d'un StreetViewPanoramaFragment, la sous-classe StreetViewPanoramaView joue le rôle de conteneur pour le panorama, en activant la fonctionnalité principale via l'objet StreetViewPanorama. Les utilisateurs de cette classe doivent transmettre toutes les méthodes du cycle de vie de l'activité (comme onCreate(), onDestroy(), onResume() et onPause())) aux méthodes correspondantes de la classe StreetViewPanoramaView.

Remarque : Google Maps Android API ne prend pas en charge plusieurs objets StreetViewPanoramaView dans une même activité.

Personnaliser les fonctionnalités contrôlées par l'utilisateur

Par défaut, les fonctionnalités suivantes sont disponibles lorsque l'utilisateur affiche le panorama Street View : panoramique, zoom et accès aux panoramas adjacents. Vous avez la possibilité d'activer et de désactiver les gestes contrôlés par l'utilisateur via des méthodes sur StreetViewPanorama. Il est toujours possible d'effectuer des modifications en utilisant la programmation lorsque le geste est désactivé.

setPanningGesturesEnabled()
Détermine si l'utilisateur peut réorienter l'appareil photo par glissement.
      mSvp.setPanningGesturesEnabled(false);
setUserNavigationEnabled()
Détermine si l'utilisateur peut passer à un autre panorama. Les utilisateurs peuvent toucher une fois les liens de navigation ou toucher deux fois la vue pour passer à un nouveau panorama.
      mSvp.setUserNavigationEnabled(false);
setZoomGesturesEnabled()
Détermine si l'utilisateur peut pincer pour zoomer.
      mSvp.setZoomGesturesEnabled(false);

Vous pouvez également déterminer si les utilisateurs peuvent voir les noms des rues :

setStreetNamesEnabled()
Détermine si l'utilisateur peut voir les noms des rues affichés au sol.
      mSvp.setStreetNamesEnabled(false);

Définir la position géographique du panorama

Pour définir la position géographique du panorama Street View, appelez StreetViewPanorama.setPosition(), en spécifiant un paramètre LatLng. Vous pouvez également spécifier un paramètre radius facultatif. Il peut être utile d'indiquer un rayon (radius) si vous souhaitez élargir ou restreindre la zone dans laquelle Street View recherche un panorama correspondant. Un rayon de 0 signifie que le panorama doit être associé exactement à la valeur LatLng spécifiée. Le rayon par défaut est de 50. S'il y a plusieurs panoramas dans la zone correspondante, l'API renvoie le résultat le plus pertinent.

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

Vous pouvez également définir la position géographique à partir d'un identifiant de panorama en spécifiant un paramètre panoId à StreetViewPanorama.setPosition().

Pour extraire l'identifiant de panorama des panoramas adjacents, utilisez d'abord getLocation() pour extraire un StreetViewPanoramaLocation. Cet objet contient l'identifiant du panorama actuel et un tableau des objets StreetViewPanoramaLink, chacun d'entre eux contenant l'identifiant d'un panorama connecté au panorama actuel.

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

Effectuer un zoom avant et arrière

Vous pouvez modifier le niveau de zoom par programmation en définissant StreetViewPanoramaCamera.zoom. Lorsque le zoom est réglé sur 1.0, l'image est agrandie avec un facteur de 2.

L'extrait de code suivant utilise StreetViewPanoramaCamera.Builder() pour construire un nouvel appareil photo avec l'inclinaison et la direction de l'appareil photo existant, tout en augmentant le zoom de cinquante pour cent.

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();

Définir l'orientation de l'appareil photo (point de vue)

Vous pouvez déterminer l'orientation de l'appareil photo Street View en définissant la direction (bearing) et l'inclinaison (tilt) sur StreetViewPanoramaCamera.

bearing
Direction dans laquelle pointe l'appareil photo, spécifiée en degrés dans le sens horaire à partir du nord géographique, autour du centre de l'appareil photo. Le nord géographique est à 0, l'est à 90, le sud à 180 et l'ouest à 270.
tilt
L'inclinaison vers le haut ou vers le bas de l'axe des Y. Les valeurs sont comprises entre -90 et 0 et entre 0 et 90, avec -90 à la verticale vers le bas, 0 centré sur l'horizon et 90 à la verticale vers le haut. L'écart est mesuré à partir de l'inclinaison par défaut initiale de l'appareil photo, qui correspond généralement (mais pas toujours) à un angle horizontal plat. Par exemple, une image prise sur une colline présentera probablement une inclinaison par défaut qui n'est pas horizontale.

L'extrait de code suivant utilise StreetViewPanoramaCamera.Builder() pour construire un nouvel appareil photo avec le zoom et l'inclinaison de l'appareil photo existant, tout en changeant la direction de 30 degrés vers la gauche.

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();

Le fragment suivant incline l'appareil photo de 30 degrés vers le haut.

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

StreetViewPanoramaCamera previous = mSvp.getPanoramaCamera();

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

Animer les mouvements de l'appareil photo

Pour animer les mouvements de l'appareil photo, appelez StreetViewPanorama.animateTo(). L'animation crée une interpolation entre les attributs de l'appareil photo actuel et ceux du nouvel appareil photo. Si vous préférez passer directement à l'appareil photo sans animation, vous pouvez définir la durée sur 0.

// 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);

Envoyer des commentaires concernant…

Google Maps Android API
Google Maps Android API
Besoin d'aide ? Consultez notre page d'assistance.