Включить кнопку «Мое местоположение»

Изображение включения кнопки «Мое местоположение».

Кнопка «Мое местоположение» отображается в правом нижнем углу карты. Когда пользователь нажимает кнопку, карта перемещается к текущему местоположению пользователя.

Начать

Прежде чем вы сможете опробовать пример кода, вам необходимо настроить среду разработки. Дополнительную информацию см. в разделе «Примеры кода Maps SDK для iOS» .

Посмотреть код

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)
 
}
}
     
#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
     

Запустите полный пример приложения локально

Пример приложения Maps SDK для iOS доступен в виде архива для загрузки на GitHub . Выполните следующие действия, чтобы установить и опробовать пример приложения Maps SDK для iOS.

  1. Запустите git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git , чтобы клонировать репозиторий образцов в локальный каталог.
  2. Откройте окно терминала, перейдите в каталог, в который вы клонировали файлы примеров, и перейдите к каталогу GoogleMaps:

    cd maps-sdk-for-ios-samples-main/GoogleMaps-Swift
    pod install
    open GoogleMapsSwiftDemos.xcworkspace
    cd maps-sdk-for-ios-samples-main/GoogleMaps
    pod install
    open GoogleMapsDemos.xcworkspace
  3. В Xcode нажмите кнопку компиляции, чтобы создать приложение с текущей схемой. При сборке возникает ошибка, предлагающая ввести ключ API в файл SDKConstants.swift для Swift или файл SDKDemoAPIKey.h для Objective-C.
  4. Если у вас еще нет ключа API, следуйте инструкциям , чтобы настроить проект в Google Cloud Console и получить ключ API. При настройке ключа в Cloud Console вы можете ограничить ключ идентификатором пакета примера приложения, чтобы гарантировать, что только ваше приложение может использовать ключ. Идентификатор пакета по умолчанию для примера приложения SDK — com.example.GoogleMapsDemos .
  5. Отредактируйте файл SDKConstants.swift для Swift или файл SDKDemoAPIKey.h для Objective-C и вставьте свой ключ API в определение константы apiKey или kAPIKey . Например:
    static let apiKey = "YOUR_API_KEY"
    static NSString *const kAPIKey = @"YOUR_API_KEY";
  6. В файле SDKConstants.swift (Swift) или файле SDKDemoAPIKey.h (Objective-C) удалите следующую строку, поскольку она используется для регистрации определяемой пользователем проблемы:
    #error (Register for API Key and insert here. Then delete this line.)
    #error Register for API Key and insert here.
  7. Создайте и запустите проект. Появится окно симулятора iOS со списком демонстраций Maps SDK .
  8. Выберите один из отображаемых вариантов, чтобы поэкспериментировать с функцией Maps SDK для iOS.
  9. Если будет предложено разрешить GoogleMapsDemos доступ к вашему местоположению, выберите «Разрешить» .