Schaltfläche "Mein Standort" aktivieren

Bild der Schaltfläche „Mein Standort“

Die Schaltfläche Mein Standort wird rechts unten in der Kartenansicht angezeigt. Wenn der Nutzer auf die Schaltfläche tippt, wird die Karte auf den aktuellen Standort des Nutzers ausgerichtet.

Jetzt starten

Bevor Sie den Beispielcode ausprobieren können, müssen Sie Ihre Entwicklungsumgebung konfigurieren. Weitere Informationen finden Sie unter Maps SDK for iOS – Beispielcode.

Code ansehen

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
      

Vollständige Beispielanwendung lokal ausführen

Die Beispielanwendung für das Maps SDK for iOS ist als Downloadarchiv auf GitHub verfügbar. So installieren und testen Sie die Beispiel-App für das Maps SDK for iOS:

  1. Führen Sie git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git aus, um das Beispiel-Repository in ein lokales Verzeichnis zu klonen.
  2. Öffnen Sie ein Terminalfenster, rufen Sie das Verzeichnis auf, in das Sie die Beispieldateien geklont haben, und wechseln Sie zum Verzeichnis „GoogleMaps“:

    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. Klicken Sie in Xcode auf die Schaltfläche „Kompilieren“, um die App mit dem aktuellen Schema zu erstellen. Beim Build wird ein Fehler ausgegeben, der Sie auffordert, Ihren API-Schlüssel in die Datei SDKConstants.swift für Swift oder SDKDemoAPIKey.h für Objective-C einzugeben.
  4. Wenn Sie noch keinen API-Schlüssel haben, folgen Sie der Anleitung, um ein Projekt in der Google Cloud Console einzurichten und einen API-Schlüssel zu erhalten. Wenn Sie den Schlüssel in der Cloud Console konfigurieren, können Sie ihn auf die Bundle-ID der Beispiel-App beschränken, damit nur Ihre App ihn verwenden kann. Die Standard-Bundle-ID der SDK-Beispielanwendung ist com.example.GoogleMapsDemos.
  5. Bearbeite die SDKConstants.swift-Datei für Swift oder die SDKDemoAPIKey.h-Datei für Objective-C und füge deinen API-Schlüssel in die Definition der Konstante apiKey oder kAPIKey ein. Beispiel:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  6. Entfernen Sie in der Datei SDKConstants.swift (Swift) oder SDKDemoAPIKey.h (Objective-C) die folgende Zeile, da sie zum Registrieren des benutzerdefinierten Problems verwendet wird:

    Swift

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

    Objective-C

    #error Register for API Key and insert here.
  7. Erstellen Sie das Projekt und führen Sie es aus. Das Fenster des iOS-Simulators wird angezeigt. Es enthält eine Liste der Maps SDK-Demos.
  8. Wählen Sie eine der angezeigten Optionen aus, um eine Funktion des Maps SDK for iOS zu testen.
  9. Wenn Sie aufgefordert werden, GoogleMapsDemos Zugriff auf Ihren Standort zu gewähren, wählen Sie Zulassen aus.