Activer le bouton Ma position

Image du bouton "Activer la localisation".

Le bouton Ma position s'affiche en bas à droite de la vue cartographique. Lorsque l'utilisateur appuie sur le bouton, la carte se déplace sur sa position actuelle.

Commencer

Avant d'essayer l'exemple de code, vous devez configurer votre environnement de développement. Pour en savoir plus, consultez Exemples de code du SDK Maps pour iOS.

Afficher le code

Swift

import GoogleMaps
import UIKit

class MyLocationViewController: UIViewController {

  private let cameraLatitude: CLLocationDegrees = -33.868

  private let cameraLongitude: CLLocationDegrees = 151.2086

  private let cameraZoom: Float = 12

  lazy var mapView: GMSMapView = {
    let camera = GMSCameraPosition(
      latitude: cameraLatitude, longitude: cameraLongitude, zoom: cameraZoom)
    return GMSMapView(frame: .zero, camera: camera)
  }()

  var observation: NSKeyValueObservation?
  var location: CLLocation? {
    didSet {
      guard oldValue == nil, let firstLocation = location else { return }
      mapView.camera = GMSCameraPosition(target: firstLocation.coordinate, zoom: 14)
    }
  }

  override func viewDidLoad() {
    super.viewDidLoad()

    mapView.delegate = self
    mapView.settings.compassButton = true
    mapView.settings.myLocationButton = true
    mapView.isMyLocationEnabled = true
    view = mapView

    // Listen to the myLocation property of GMSMapView.
    observation = mapView.observe(\.myLocation, options: [.new]) {
      [weak self] mapView, _ in
      self?.location = mapView.myLocation
    }
  }

  deinit {
    observation?.invalidate()
  }
}

extension MyLocationViewController: GMSMapViewDelegate {
  func mapView(_ mapView: GMSMapView, didTapMyLocation location: CLLocationCoordinate2D) {
    let alert = UIAlertController(
      title: "Location Tapped",
      message: "Current location: <\(location.latitude), \(location.longitude)>",
      preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: .default))
    present(alert, animated: true)
  }
}
      

Objective-C

#import "GoogleMapsDemos/Samples/MyLocationViewController.h"

#import <GoogleMaps/GoogleMaps.h>

@implementation MyLocationViewController {
  GMSMapView *_mapView;
  BOOL _firstLocationUpdate;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
                                                          longitude:151.2086
                                                               zoom:12];

  _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  _mapView.delegate = self;
  _mapView.settings.compassButton = YES;
  _mapView.settings.myLocationButton = YES;

  // Listen to the myLocation property of GMSMapView.
  [_mapView addObserver:self
             forKeyPath:@"myLocation"
                options:NSKeyValueObservingOptionNew
                context:NULL];

  self.view = _mapView;

  // Ask for My Location data after the map has already been added to the UI.
  GMSMapView *mapView = _mapView;
  dispatch_async(dispatch_get_main_queue(), ^{
    mapView.myLocationEnabled = YES;
  });
}

- (void)mapView:(GMSMapView *)mapView didTapMyLocation:(CLLocationCoordinate2D)location {
  NSString *message = [NSString stringWithFormat:@"My Location Dot Tapped at: [lat: %f, lng: %f]",
                                                 location.latitude, location.longitude];
  UIAlertController *alertController =
      [UIAlertController alertControllerWithTitle:@"Location Tapped"
                                          message:message
                                   preferredStyle:UIAlertControllerStyleAlert];
  UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK"
                                                     style:UIAlertActionStyleDefault
                                                   handler:^(UIAlertAction *action){
                                                   }];
  [alertController addAction:okAction];
  [self presentViewController:alertController animated:YES completion:nil];
}

- (void)dealloc {
  [_mapView removeObserver:self forKeyPath:@"myLocation" context:NULL];
}

#pragma mark - KVO updates

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {
  if (!_firstLocationUpdate) {
    // If the first location update has not yet been received, then jump to that location.
    _firstLocationUpdate = YES;
    CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey];
    _mapView.camera = [GMSCameraPosition cameraWithTarget:location.coordinate zoom:14];
  }
}

@end
      

Exécuter l'application exemple complète en local

L'application exemple du SDK Maps pour iOS est disponible en tant qu'archive de téléchargement sur GitHub. Suivez ces étapes pour installer et essayer l'application exemple du SDK Maps pour iOS.

  1. Exécutez git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git pour cloner le dépôt d'exemples dans un répertoire local.
  2. Ouvrez une fenêtre de terminal, accédez au répertoire dans lequel vous avez cloné les fichiers exemples, puis accédez au répertoire Google Maps:

    Swift

    cd maps-sdk-for-ios-samples-main/GoogleMaps-Swift
    pod install
    open GoogleMapsSwiftDemos.xcworkspace

    Objective-C

    cd maps-sdk-for-ios-samples-main/GoogleMaps
    pod install
    open GoogleMapsDemos.xcworkspace
  3. Dans Xcode, appuyez sur le bouton de compilation pour créer l'application avec le schéma actuel. La compilation génère une erreur et vous invite à saisir votre clé API dans le fichier SDKConstants.swift pour Swift ou le fichier SDKDemoAPIKey.h pour Objective-C.
  4. Si vous ne disposez pas encore d'une clé API, suivez les instructions pour configurer un projet dans la Google Cloud Console et obtenir une clé API. Lorsque vous configurez la clé dans Cloud Console, vous pouvez la restreindre à l'identifiant de groupe de l'exemple d'application afin de vous assurer que seule votre application peut l'utiliser. L'identifiant de bundle par défaut de l'application d'exemples de SDK est com.example.GoogleMapsDemos.
  5. Modifiez le fichier SDKConstants.swift pour Swift ou le fichier SDKDemoAPIKey.h pour Objective-C et collez votre clé API dans la définition de la constante apiKey ou kAPIKey. Exemple :

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  6. Dans le fichier SDKConstants.swift (Swift) ou SDKDemoAPIKey.h (Objective-C), supprimez la ligne suivante, car elle permet d'enregistrer le problème défini par l'utilisateur:

    Swift

    #error (Register for API Key and insert here. Then delete this line.)

    Objective-C

    #error Register for API Key and insert here.
  7. Créez et exécutez le projet. La fenêtre du simulateur iOS s'affiche, avec une liste de démonstrations du SDK Maps.
  8. Choisissez l'une des options affichées pour tester une fonctionnalité du SDK Maps pour iOS.
  9. Si vous êtes invité à autoriser GoogleMapsDemos à accéder à votre position, sélectionnez Autoriser.