Włączanie przycisku Moja lokalizacja

Obraz przycisku Włącz moją lokalizację

W prawym dolnym rogu mapy wyświetla się przycisk Moja lokalizacja. Gdy użytkownik kliknie przycisk, mapa przesunie się do jego bieżącej lokalizacji.

Rozpocznij

Zanim wypróbujesz przykładowy kod, musisz skonfigurować środowisko programistyczne. Więcej informacji znajdziesz w próbkach kodu Maps SDK na iOS.

Wyświetlanie kodu

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
      

Lokalne uruchamianie pełnej przykładowej aplikacji

Przykładowa aplikacja Maps SDK na iOS jest dostępna jako archiwum do pobraniaGitHub. Aby zainstalować i wypróbować przykładową aplikację Maps SDK na iOS, wykonaj te czynności.

  1. Uruchom git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git, aby skopiować repozytorium z przykładami do katalogu lokalnego.
  2. Otwórz okno terminala, przejdź do katalogu, w którym sklonowano przykładowe pliki, a potem przejdź do katalogu 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. W Xcode naciśnij przycisk kompilacji, aby skompilować aplikację z użyciem bieżącego schematu. Kompilacja powoduje błąd i wyświetla prośbę o wpisanie klucza interfejsu API w pliku SDKConstants.swift (w przypadku Swift) lub SDKDemoAPIKey.h (w przypadku Objective-C).
  4. Jeśli nie masz jeszcze klucza interfejsu API, wykonaj te instrukcje, aby skonfigurować projekt w Konsoli Google Cloud i uzyskać klucz interfejsu API. Podczas konfigurowania klucza w konsoli Google Cloud możesz ograniczyć dostęp do niego do identyfikatora pakietu przykładowej aplikacji, aby mieć pewność, że tylko Twoja aplikacja będzie mogła z niego korzystać. Domyślny identyfikator pakietu aplikacji z przykładowymi pakietami SDK to com.example.GoogleMapsDemos.
  5. Zmień plik SDKConstants.swift w przypadku Swifta lub plik SDKDemoAPIKey.h w przypadku Objective-C i wklej klucz interfejsu API w definicji stałej apiKey lub kAPIKey. Na przykład:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  6. W pliku SDKConstants.swift (Swift) lub SDKDemoAPIKey.h (Objective-C) usuń ten wiersz, ponieważ służy on do rejestrowania problemów zdefiniowanych przez użytkownika:

    Swift

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

    Objective-C

    #error Register for API Key and insert here.
  7. Utwórz i uruchom projekt. Pojawi się okno symulatora iOS z listą demo pakietu Maps SDK.
  8. Wybierz jedną z wyświetlonych opcji, aby wypróbować funkcję pakietu SDK Maps na iOS.
  9. Jeśli pojawi się prośba o zezwolenie aplikacji GoogleMapsDemos na dostęp do Twojej lokalizacji, wybierz Zezwól.