Vous êtes prêt !

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

Activer Google Maps SDK for iOS

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 SDK for iOS
  3. Créer les clés appropriées
Continuer

Appareil photo et vue

Google Maps SDK for iOS vous permet de changer le point de vue de l'utilisateur de la carte en modifiant l'appareil photo de la carte.

Introduction

Il est possible d'incliner et de faire pivoter les cartes ajoutées avec Google Maps SDK for iOS à l'aide de gestes simples, ce qui permet aux utilisateurs d'ajuster la carte avec une orientation plus parlante pour eux. À n'importe quel niveau de zoom, vous pouvez effectuer un panorama sur la carte ou modifier sa perspective avec une latence très faible. La direction, l'inclinaison, la localisation et le niveau de zoom de la carte peuvent être contrôlés par programmation via l'objet GMSCameraPosition.

Les modifications apportées à l'appareil photo ne modifieront pas les marqueurs, les polylignes ou tout autre élément graphique que vous avez ajouté, mais vous pouvez néanmoins modifier ces ajouts pour qu'ils s'intègrent mieux à la nouvelle vue.

Le reste de cette rubrique explique comment utiliser l'appareil photo pour apporter des modifications afin d'agir sur le niveau de zoom, la fenêtre d'affichage ou la perspective de la carte.

Vue de la carte

À l'instar de Google Maps sur le Web, Google Maps SDK for iOS effectue une représentation de la surface de la terre (sphère) sur l'écran de votre appareil (surface plane) en utilisant une projection de Mercator. Vers l'est et vers l'ouest, la carte est répétée à l'infini car la terre tourne sur elle-même. Vers le nord et le sud, la carte est limitée à environ 85 degrés nord et 85 degrés sud.

Remarque : Une projection de Mercator a une largeur finie sur le plan longitudinal, mais une hauteur infinie sur le plan latitudinal. Nous « coupons » l'image de la carte de base en utilisant la projection de Mercator à environ +/- 85 degrés pour rendre carrée la carte qui en résulte et ainsi simplifier la logique de sélection des tuiles.

Position de l'appareil photo

La vue de la carte est modélisée comme un appareil photo orienté vers le bas sur une surface plane. La position de l'appareil photo (et par conséquent le rendu de la carte) est indiquée par les propriétés suivantes : localisation latitude/longitude, zoom, direction et angle de vue.

La position initiale de l'appareil photo est définie lorsque vous créez l'objet GMSMapView via son constructeur.

Swift

let camera = GMSCameraPosition.camera(withLatitude: -33.8683,
                                      longitude: 151.2086,
                                      zoom: 16)
let mapView = GMSMapView.map(withFrame: self.view.bounds, camera: camera)

Objective-C

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:16];
mapView = [GMSMapView mapWithFrame:self.view.bounds camera:camera];

Vous pouvez également créer GMSMapView avec la méthode d'initialisation UIView par défaut. Dans ce cas, la position de départ de l'appareil photo correspond à un point géographique par défaut, et peut être modifiée explicitement après la création.

Swift

let mapView = GMSMapView(frame: self.view.bounds)

Objective-C

mapView = [[GMSMapView alloc] initWithFrame:self.view.bounds];

Déplacer l'appareil photo

Lorsque vous avez créé l'objet GMSMapView, et qu'il est associé à un appareil photo configuré ou par défaut, vous pouvez le modifier de plusieurs manières. Lorsque vous modifiez l'appareil photo, vous avez la possibilité d'animer le mouvement d'appareil photo qui en résulte. L'animation effectue une interpolation entre les attributs d'appareil photo actuels et les nouveaux attributs. Vous pouvez également contrôler la durée de l'animation à l'aide de Core Animation.

Vous pouvez modifier l'objet GMSCameraPosition et le définir sur GMSMapView. L'appareil photo est ainsi ancré sur le nouveau point géographique sans animation. GMSCameraPosition peut être créé pour configurer la latitude, la longitude ou le zoom, ou encore pour configurer ces propriétés plus la direction et l'angle de vue.

Swift

let sydney = GMSCameraPosition.camera(withLatitude: -33.8683,
                                      longitude: 151.2086,
                                      zoom: 6)
mapView.camera = sydney

Objective-C

GMSCameraPosition *sydney = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
[mapView setCamera:sydney];

GMSCameraPosition peut également être créé avec des propriétés explicites de direction et d'angle de vue.

Swift

let fancy = GMSCameraPosition.camera(withLatitude: -33,
                                     longitude: 151,
                                     zoom: 6,
                                     bearing: 270,
                                     viewingAngle: 45)
mapView.camera = fancy

Objective-C

GMSCameraPosition *fancy = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                       longitude:151.2086
                                                            zoom:6
                                                         bearing:30
                                                    viewingAngle:45];
[mapView setCamera:fancy];

Si vous préférez animer la transition, vous pouvez appeler l'une des diverses méthodes qui vous permettent d'animer l'appareil photo lorsqu'il se déplace vers un nouveau point géographique. Vous pouvez contrôler la durée de l'animation avec Core Animation.

Swift

mapView.animate(toViewingAngle: 45)

Objective-C

[mapView animateToViewingAngle:45];

Enfin, l'objet GMSCameraUpdate vous permet de spécifier une nouvelle vue pour l'appareil photo, et de choisir si vous voulez vous y ancrer ou effectuer une animation vers cette vue. Vous pouvez mettre à jour la vue en transmettant un nouvel objet GMSCameraUpdate à la méthode moveCamera de GMSMapView. Cela peut s'avérer utile lorsque vous voulez modifier l'appareil photo afin de respecter des limites prédéfinies.

Swift

let update = GMSCameraUpdate.fit(bounds, withPadding: 50.0)
mapView.moveCamera(update)

Objective-C

GMSCameraUpdate *update = [GMSCameraUpdate fitBounds:bounds
                                         withPadding:50.0f];
[mapView moveCamera:update];

Les sections ci-dessous décrivent chaque propriété de l'appareil photo et expliquent comment modifier les valeurs une fois que la carte a été créée.

Localisation

La localisation détermine le centre de la carte. Les localisations sont définies par la latitude et la longitude, et sont représentées par programmation au moyen de CLLocationCoordinate2D,créée avec CLLocationCoordiante2DMake.

La latitude peut être comprise -85 et 85 degrés, inclus. Les valeurs supérieures ou inférieures à cette fourchette seront limitées à la valeur la plus proche dans la fourchette. Par exemple, si vous définissez une latitude de 100, la valeur sera fixée à 85. La longitude est comprise entre -180 et 180 degrés, inclus. Les valeurs supérieures ou inférieures à cette fourchette seront modifiées de manière à se trouver dans la fourchette [-180, 180). Par exemple, les valeurs 480, 840 et 1200 seront toutes assimilées à 120 degrés.

Les utilisateurs peuvent modifier la localisation en effectuant un panorama sur la carte. Vous pouvez définir la localisation par programmation avec animateToLocation: sur GMSMapView.

Swift

mapView.animate(toLocation: CLLocationCoordinate2D(latitude: -33.868, longitude: 151.208))

Objective-C

[mapView animateToLocation:CLLocationCoordinate2DMake(-33.868, 151.208)];

Vous pouvez également paramétrer l'appareil photo directement, sans animer la modification.

Swift

let target = CLLocationCoordinate2D(latitude: -33.868, longitude: 151.208)
mapView.camera = GMSCameraPosition.camera(withTarget: target, zoom: 6)

Objective-C

CLLocationCoordinate2D target =
    CLLocationCoordinate2DMake(-33.868, 151.208);
mapView.camera = [GMSCameraPosition cameraWithTarget:target zoom:6];

Zoom

Le niveau de zoom de l'appareil photo détermine l'échelle de la carte. Plus le niveau de zoom est élevé, plus on peut voir de détails sur la carte ; et inversement, plus le niveau de zoom est faible, plus la partie du monde affichée à l'écran est grande. À un niveau de zoom 0, l'échelle de la carte est telle que le monde entier a une largeur d'environ 256 points.

Augmenter le niveau de zoom de 1 double la largeur du monde à l'écran. Ainsi, à un niveau de zoom N, la largeur du monde est environ de 256 * 2N. Par exemple, à un niveau de zoom de 2, le monde entier mesure environ 1 024 points de large. Notez que le niveau de zoom doit être un nombre entier. La fourchette de niveaux de zoom autorisée par la carte dépend d'un certain nombre de facteurs, notamment le lieu, le type de carte et la taille de l'écran. La liste suivante indique le niveau de détail approximatif que vous pouvez vous attendre à voir à chaque niveau de zoom :

  • 1 : Monde
  • 5 : Masse continentale/continent
  • 10 : Ville
  • 15 : Rues
  • 20 : Immeubles

Les utilisateurs peuvent modifier le niveau de zoom en effectuant un pincement à deux doigts. Vous pouvez définir le zoom par programmation avec animateToZoom: sur GMSMapView.

Swift

mapView.animate(toZoom: 12)

Objective-C

[mapView animateToZoom:12];

Définir un zoom minimum ou maximum

Vous pouvez limiter la fourchette de zoom disponible pour la carte en définissant un niveau de zoom minimum et maximum. Le code ci-dessous limite le niveau de zoom entre 10 et 15.

Swift

let camera = GMSCameraPosition.camera(withLatitude: 41.887,
                                      longitude: -87.622,
                                      zoom: 12)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.setMinZoom(10, maxZoom: 15)

Objective-C

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:41.887
                                                       longitude:-87.622
                                                             zoom:12];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero
                                        camera:camera];
[mapView setMinZoom:10 maxZoom:15];

La fourchette de zoom doit être définie en utilisant la méthode setMinZoom:maxZoom: ; cependant, les valeurs peuvent être lues individuellement à l'aide des propriétés minZoom et maxZoom. Cela est utile lorsque vous ne limitez qu'une seule des valeurs. Le code ci-dessous modifie uniquement le niveau de zoom minimum.

Swift

mapView.setMinZoom(12, maxZoom: mapView.maxZoom)

Objective-C

[mapView setMinZoom:12 maxZoom:mapView.maxZoom];

Si, après la mise à jour du zoom minimum et maximum, le niveau de zoom de l'appareil photo est défini sur une valeur hors de la nouvelle fourchette, le zoom actuel est mis à jour automatiquement afin d'afficher la valeur valide la plus proche. Dans le code ci-dessous, par exemple, le zoom d'origine est défini sur 4. Lorsque la fourchette de zoom est ensuite fixée à 10-15, le zoom actuel est mis à jour sur 10.

Swift

// Sets the zoom level to 4.
let camera = GMSCameraPosition.camera(withLatitude: 41.887,
                                      longitude: -87.622,
                                      zoom: 4)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
// The current zoom, 4, is outside of the range. The zoom will change to 10.
mapView.setMinZoom(10, maxZoom: 15)

Objective-C

// Sets the zoom level to 4.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:41.887
                                                       longitude:-87.622
                                                             zoom:4];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero
                                        camera:camera];
// The current zoom, 4, is outside of the range. The zoom will change to 10.
[mapView setMinZoom:10 maxZoom:15];

Par défaut, minZoom et maxZoom correspondent aux valeurs définies par les constantes globales kGMSMinZoomLevel et kGMSMaxZoomLevel.

Direction (orientation)

La direction est le cap vers lequel pointe une ligne verticale sur la carte, mesurée en degrés dans le sens horaire à partir du nord. Un conducteur tourne souvent sa carte routière pour l'aligner dans le sens de la route, tandis qu'un randonneur utilisant une carte et une boussole oriente généralement la carte afin qu'une ligne verticale pointe vers le nord. Google Maps SDK for iOS vous permet de modifier l'alignement ou l'orientation d'une carte. Par exemple, avec une direction de 90 degrés, l'orientation vers le haut de la carte pointe vers l'est.

Les utilisateurs peuvent modifier la direction en effectuant un geste à deux doigts afin de faire pivoter l'orientation de la carte. Vous pouvez définir la direction par programmation avec animateToBearing: sur GMSMapView.

Swift

mapView.animate(toBearing: 0)

Objective-C

[mapView animateToBearing:0];

Angle de vue

L'angle de vue est la position de l'appareil photo sur un arc directement au-dessus du point central de la carte et de la surface de la Terre, mesurée en degrés à partir du nadir(direction qui pointe directement sous l'appareil photo). Lorsque vous changez l'angle de vue, la carte est affichée en perspective, les caractéristiques situées entre l'appareil photo et la position de la carte apparaissent proportionnellement plus grandes, et les caractéristiques situées au-delà de la position de la carte apparaissent proportionnellement plus petites, ce qui donne un effet tridimensionnel.

L'angle de vue peut être compris entre 0 (pointant directement vers le bas sur la carte) et une valeur maximum dépendant du niveau de zoom. L'angle maximum est défini en tant que série de segments de ligne en fonction du zoom plutôt que de manière incrémentielle. Pour les niveaux de zoom 16 et supérieurs, l'angle maximum est de 65 degrés. Pour les niveaux de zoom 10 et inférieurs, l'angle maximum est de 30 degrés.

Les utilisateurs peuvent modifier l'angle de vue en effectuant un balayage à deux doigts. Vous pouvez définir l'angle de vue par programmation avec animateToViewingAngle: sur GMSMapView.

Swift

mapView.animate(toViewingAngle: 45)

Objective-C

[mapView animateToViewingAngle:45];

Construire une GMSCameraPosition

Il peut parfois être utile de déplacer l'appareil photo pour que la totalité d'une zone d'intérêt soit visible au plus haut niveau de zoom possible. Par exemple, si vous affichez toutes les stations-service dans un rayon de 5 km autour de la position actuelle de l'utilisateur, vous pouvez déplacer l'appareil photo afin qu'elles soient toutes visibles sur l'écran.

Pour ce faire, vous devez d'abord calculer la limite GMSCoordinateBounds qui doit être visible à l'écran. Ensuite, utilisez la méthode cameraForBounds:insets: sur votre GMSMapView pour renvoyer une nouvelle GMSCameraPosition. Ainsi, vous êtes sûr que les limites GMSCoordinateBounds données tiennent entièrement dans la taille de la carte actuelle. Notez que l'inclinaison et la direction de la carte seront toutes deux définies sur 0.

L'exemple ci-dessous montre comment modifier l'appareil photo de sorte que les villes de Vancouver et de Calgary apparaissent dans la même vue.

Swift

let vancouver = CLLocationCoordinate2D(latitude: 49.26, longitude: -123.11)
let calgary = CLLocationCoordinate2D(latitude: 51.05,longitude: -114.05)
let bounds = GMSCoordinateBounds(coordinate: vancouver, coordinate: calgary)
let camera = mapView.camera(for: bounds, insets: UIEdgeInsets())!
mapView.camera = camera

Objective-C

CLLocationCoordinate2D vancouver = CLLocationCoordinate2DMake(49.26, -123.11);
CLLocationCoordinate2D calgary = CLLocationCoordinate2DMake(51.05, -114.05);
GMSCoordinateBounds *bounds =
    [[GMSCoordinateBounds alloc] initWithCoordinate:vancouver coordinate:calgary];
GMSCameraPosition *camera = [mapView cameraForBounds:bounds insets:UIEdgeInsetsZero];
mapView.camera = camera;

Remarque : la méthode cameraForBounds:insets: prendra en compte la [marge extérieure] définie sur GMSMapView, en plus des éléments incrustés spécifiés ici.

Actualiser la vue de l'appareil photo

Au lieu de modifier directement la vue de l'appareil photo avec différentes méthodes de GMSMapView, vous pouvez créer une opération afin d'actualiser la carte d'une manière prédéfinie, appelée GMSCameraUpdate, et l'appliquer à la carte avec la méthode moveCamera: de GMSMapView. Vous pouvez également animer l'actualisation de l'appareil photo avec la méthode animateWithCameraUpdate:.

GMSCameraUpdate doit uniquement être créée en utilisant l'une de ses méthodes d'usine.

zoomIn: et zoomOut:
Modifient le niveau de zoom actuel de 1.0, tout en laissant les autres propriétés inchangées.
zoomTo:
Modifie le niveau de zoom actuel à la valeur donnée, tout en laissant les autres propriétés inchangées.
zoomBy:
Augmente (ou diminue, si la valeur est négative) le niveau de zoom de la valeur donnée.
zoomBy:atPoint:
Augmente (ou diminue, si la valeur est négative) le niveau de zoom de la valeur donnée, tout en conservant la position du point spécifié à l'écran.
setTarget:
Modifie la latitude et la longitude de l'appareil photo, tout en conservant les autres propriétés.
setTarget:zoom:
Modifie la latitude, la longitude et le zoom de l'appareil photo, tout en conservant les autres propriétés.
setCamera:
Vous permet de définir une nouvelle GMSCameraPosition.
scrollByX:Y:
Modifie la latitude et la longitude de l'appareil photo de sorte que la carte se déplace du nombre de points spécifié. Une valeur x positive déplace l'appareil photo vers la droite, de sorte que la carte semble avoir bougé vers la gauche. Une valeur y positive déplace l'appareil photo vers le bas, de sorte que la carte semble avoir bougé vers le haut. Le défilement est effectué par rapport à l'orientation actuelle de l'appareil photo. Par exemple, si l'appareil photo est orienté à 90 degrés, alors l'est est « en haut ».
fitBounds:
Modifie l'appareil photo de sorte que les limites indiquées soient centrées sur l'écran au plus haut niveau de zoom possible. Applique une marge extérieure par défaut aux limites de 64 points.
fitBounds:withPadding:
Modifie l'appareil photo de sorte que les limites indiquées soient centrées sur l'écran au plus haut niveau de zoom possible. Vous permet de définir une marge extérieure personnalisée, en points, pour la zone de délimitation. Utilisez cette méthode lorsque vous souhaitez avoir la même quantité de marge extérieure sur tous les côtés.
fitBounds:withEdgeInsets:
Modifie l'appareil photo de sorte que les limites indiquées soient centrées sur l'écran au plus haut niveau de zoom possible. Vous permet de définir une marge extérieure personnalisée, sous forme de UIEdgeInsets, pour la zone de délimitation. Utilisez cette méthode lorsque vous voulez définir la marge extérieure indépendamment sur chaque bord.

Remarque : Les méthodes fitBounds: prendront en compte la [marge extérieure] que vous avez définie sur la carte en plus de toute marge extérieure spécifiée afin de respecter les limites. Par exemple, si vous spécifiez 100 points de marge extérieure autour de votre GMSMapView, puis que vous appelez la méthode fitBounds:, les modifications de l'appareil photo tiendront compte des 64 points de la marge extérieure par défaut en plus des 100 points de la marge extérieure personnalisée.

Utiliser GMSCameraUpdate

Pour mettre à jour l'appareil photo avec un objet GMSCameraUpdate :

  1. Créez un objet GMSMapView initial.
  2. Créez un objet GMSCameraUpdate avec l'une des méthodes d'usine fournies, décrites ci-dessus.
  3. Appliquez la mise à jour de l'appareil photo à GMSMapView avec la méthode moveCamera: ou animateWithCameraUpdate:.

Les extraits de code suivants illustrent quelques-unes des méthodes les plus utilisées pour déplacer l'appareil photo avec GMSCameraUpdate.

Swift

// Zoom in one zoom level
let zoomCamera = GMSCameraUpdate.zoomIn()
mapView.animate(with: zoomCamera)

// Center the camera on Vancouver, Canada
let vancouver = CLLocationCoordinate2D(latitude: 49.26, longitude: -123.11)
let vancouverCam = GMSCameraUpdate.setTarget(vancouver)
mapView.animate(with: vancouverCam)

// Move the camera 100 points down, and 200 points to the right.
let downwards = GMSCameraUpdate.scrollBy(x: 100, y: 200)
mapView.animate(with: downwards)

Objective-C

// Zoom in one zoom level
GMSCameraUpdate *zoomCamera = [GMSCameraUpdate zoomIn];
[mapView animateWithCameraUpdate:zoomCamera];

// Center the camera on Vancouver, Canada
CLLocationCoordinate2D vancouver = CLLocationCoordinate2DMake(49.26, -123.11);
GMSCameraUpdate *vancouverCam = [GMSCameraUpdate setTarget:vancouver];
[mapView animateWithCameraUpdate:vancouverCam];

// Move the camera 100 points down, and 200 points to the right.
GMSCameraUpdate *downwards = [GMSCameraUpdate scrollByX:100 y:200];
[mapView animateWithCameraUpdate:downwards];

Envoyer des commentaires concernant…

Google Maps SDK for iOS
Google Maps SDK for iOS
Besoin d'aide ? Consultez notre page d'assistance.