Obter localização / coordenadas atuais do usuário


194

Como posso armazenar a localização atual do usuário e também mostrar a localização em um mapa?

Sou capaz de mostrar coordenadas predefinidas em um mapa, só não sei como receber informações do dispositivo.

Também sei que tenho que adicionar alguns itens em um Plist. Como eu posso fazer isso?

Respostas:


225

Para obter a localização atual de um usuário, você precisa declarar:

let locationManager = CLLocationManager()

Em viewDidLoad()você tem que instanciar a CLLocationManagerclasse, assim:

// Ask for Authorisation from the User.
self.locationManager.requestAlwaysAuthorization() 

// For use in foreground
self.locationManager.requestWhenInUseAuthorization()

if CLLocationManager.locationServicesEnabled() {
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    locationManager.startUpdatingLocation()
}

Em seguida, no método CLLocationManagerDelegate, você pode obter as coordenadas de localização atuais do usuário:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
    print("locations = \(locValue.latitude) \(locValue.longitude)")
}

No info.plist, você terá que adicionar NSLocationAlwaysUsageDescription e sua mensagem de alerta personalizada como; AppName (Demo App) gostaria de usar sua localização atual.


60
Não se esqueça sobre Import MapKit+ CoreLocation+ acrescentando CLLocationManagerDelegatena definição de classe.
Lukesivi

7
@Yusha Se isso se parece com Objective-C para você, então você nunca viu Objective-C (nem Swift)
Martin Marconcini

4
Você esqueceu de mencionar a implementação do protocolo CLLocationManagerDelegate.
precisa saber é o seguinte

13
NSLocationAlwaysUsageDescriptionfoi renomeado paraPrivacy - Location Always Usage Description
Saoud Rizwan

4
Você deve declarar locationManagercomo uma variável global em vez de uma variável localviewDidLoad
chengsam

100

você deve executar essas etapas:

  1. adicione CoreLocation.frameworka BuildPhases -> Link Binary With Libraries (não é mais necessário a partir do XCode 7.2.1)
  2. importar CoreLocationpara sua classe - provavelmente ViewController.swift
  3. adicione CLLocationManagerDelegateà sua declaração de classe
  4. adicionar NSLocationWhenInUseUsageDescriptione NSLocationAlwaysUsageDescriptionplist
  5. gerenciador de localização init:

    locationManager = CLLocationManager()
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()
  6. obter localização do usuário por:

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let locValue:CLLocationCoordinate2D = manager.location!.coordinate
        print("locations = \(locValue.latitude) \(locValue.longitude)")
    }

3
nova função: func locationManager (manager: CLLocationManager, didUpdateLocations locais: [CLLocation])
user523234

Resposta passo a passo. Mas atualize-o. Não está funcionando por enquanto.
Dheeraj D

59

Atualização para iOS 12.2 com Swift 5

você deve adicionar as seguintes permissões de privacidade no arquivo plist

<key>NSLocationWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Description</string>

Aqui está como eu sou

ficando a localização atual e mostrando no mapa no Swift 2.0

Certifique-se de ter adicionado a estrutura CoreLocation e MapKit ao seu projeto (isso não é necessário no XCode 7.2.1)

import Foundation
import CoreLocation
import MapKit

class DiscoverViewController : UIViewController, CLLocationManagerDelegate {

    @IBOutlet weak var map: MKMapView!
    var locationManager: CLLocationManager!

    override func viewDidLoad()
    {
        super.viewDidLoad()

        if (CLLocationManager.locationServicesEnabled())
        {
            locationManager = CLLocationManager()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.requestAlwaysAuthorization()
            locationManager.startUpdatingLocation()
        }
    }

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    {

        let location = locations.last! as CLLocation

        let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))

        self.map.setRegion(region, animated: true)
    }
}

Aqui está a tela de resultados

uma captura de tela do mapa, centralizada em Mumbai


Eu corro seu código e recebo uma tela branca em branco. Existe uma visão ou algo que eu preciso adicionar ao storyboard?
precisa saber é o seguinte

1
Trabalhou muito para mim em Swift 4, apenas teve que adicionar um sublinhado (solicitado pelo Xcode) para que a linha locationManager se tornou: func locationManager (_ manager: CLLocationManager, didUpdateLocations locais: [CLLocation])
Elias Lofgren

32

Importar biblioteca como:

import CoreLocation

defina Delegado:

CLLocationManagerDelegate

Tome variável como:

var locationManager:CLLocationManager!

Em viewDidLoad () escreva este código bonito:

 locationManager = CLLocationManager()
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()

    if CLLocationManager.locationServicesEnabled(){
        locationManager.startUpdatingLocation()
    }

Escreva métodos delegados de CLLocation:

    //MARK: - location delegate methods
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let userLocation :CLLocation = locations[0] as CLLocation

    print("user latitude = \(userLocation.coordinate.latitude)")
    print("user longitude = \(userLocation.coordinate.longitude)")

    self.labelLat.text = "\(userLocation.coordinate.latitude)"
    self.labelLongi.text = "\(userLocation.coordinate.longitude)"

    let geocoder = CLGeocoder()
    geocoder.reverseGeocodeLocation(userLocation) { (placemarks, error) in
        if (error != nil){
            print("error in reverseGeocode")
        }
        let placemark = placemarks! as [CLPlacemark]
        if placemark.count>0{
            let placemark = placemarks![0]
            print(placemark.locality!)
            print(placemark.administrativeArea!)
            print(placemark.country!)

            self.labelAdd.text = "\(placemark.locality!), \(placemark.administrativeArea!), \(placemark.country!)"
        }
    }

}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
    print("Error \(error)")
}

Agora defina a permissão para acessar o local, adicione esses valores-chave ao seu arquivo info.plist

 <key>NSLocationAlwaysUsageDescription</key>
<string>Will you allow this app to always know your location?</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Do you allow this app to know your current location?</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Do you allow this app to know your current location?</string>

insira a descrição da imagem aqui

100% funcionando sem qualquer problema. TESTADO


Eu tenho outro idioma, então não está funcionando. Eu quero apenas o idioma inglês.
Maulik shah

29

@wonderwhy adicionei minha captura de tela do código.  pls verificar isso.  Você precisará adicionar <code> NSLocationWhenInUseUsageDescription na lista de autorização. </code>

NSLocationWhenInUseUsageDescription = Solicitar permissão para usar o serviço de localização quando os aplicativos estiverem em segundo plano. no seu arquivo plist.

Se isso funcionar, vote na resposta.


1
você pode explicar a sua resposta mais adicionando code.If você deseja
Krutarth Patel

16
seria bom ter o trecho de código usando linguagem de marcação em vez de colar uma imagem
Nicholas Allio

25

Primeira importação da biblioteca Corelocation e MapKit:

import MapKit
import CoreLocation

herdar de CLLocationManagerDelegate para nossa classe

class ViewController: UIViewController, CLLocationManagerDelegate

criar uma variável locationManager, esses serão seus dados de localização

var locationManager = CLLocationManager()

crie uma função para obter as informações do local, seja específico: esta sintaxe exata funciona:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

em sua função, crie uma constante para o local atual dos usuários

let userLocation:CLLocation = locations[0] as CLLocation // note that locations is same as the one in the function declaration  

parar de atualizar o local, isso impede que o dispositivo altere constantemente a janela para centralizar sua localização enquanto se move (você pode omitir isso se desejar que ele funcione de outra forma)

manager.stopUpdatingLocation()

faça com que os usuários coordenem a partir do userLocatin que você acabou de definir:

let coordinations = CLLocationCoordinate2D(latitude: userLocation.coordinate.latitude,longitude: userLocation.coordinate.longitude)

defina com o zoom que você deseja que seu mapa seja:

let span = MKCoordinateSpanMake(0.2,0.2) combine esses dois para obter a região:

let region = MKCoordinateRegion(center: coordinations, span: span)//this basically tells your map where to look and where from what distance

agora defina a região e escolha se deseja que ela vá com animação ou não

mapView.setRegion(region, animated: true)

feche sua função }

do seu botão ou de outra maneira que você deseja definir o locationManagerDeleget como self

agora permita que o local seja mostrado

designar precisão

locationManager.desiredAccuracy = kCLLocationAccuracyBest

autorizar:

 locationManager.requestWhenInUseAuthorization()

para poder autorizar o serviço de localização, você precisa adicionar essas duas linhas ao seu plist

insira a descrição da imagem aqui

obter localização:

locationManager.startUpdatingLocation()

mostre ao usuário:

mapView.showsUserLocation = true

Este é o meu código completo:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    @IBOutlet weak var mapView: MKMapView!

    var locationManager = CLLocationManager()


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func locateMe(sender: UIBarButtonItem) {
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()

        mapView.showsUserLocation = true

    }

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let userLocation:CLLocation = locations[0] as CLLocation

        manager.stopUpdatingLocation()

        let coordinations = CLLocationCoordinate2D(latitude: userLocation.coordinate.latitude,longitude: userLocation.coordinate.longitude)
        let span = MKCoordinateSpanMake(0.2,0.2)
        let region = MKCoordinateRegion(center: coordinations, span: span)

        mapView.setRegion(region, animated: true)

    }
}

20

Swift 3.0

Se você não deseja mostrar a localização do usuário no mapa, mas apenas deseja armazená-lo na base do fogo ou em outro local, siga estas etapas,

import MapKit
import CoreLocation

Agora use CLLocationManagerDelegate no seu VC e você deve substituir os últimos três métodos mostrados abaixo. Você pode ver como o método requestLocation () obterá a localização atual do usuário usando esses métodos.

class MyVc: UIViewController, CLLocationManagerDelegate {

  let locationManager = CLLocationManager()

 override func viewDidLoad() {
    super.viewDidLoad()

    isAuthorizedtoGetUserLocation()

    if CLLocationManager.locationServicesEnabled() {
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    }
}

 //if we have no permission to access user location, then ask user for permission.
func isAuthorizedtoGetUserLocation() {

    if CLLocationManager.authorizationStatus() != .authorizedWhenInUse     {
        locationManager.requestWhenInUseAuthorization()
    }
}


//this method will be called each time when a user change his location access preference.
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
    if status == .authorizedWhenInUse {
        print("User allowed us to access location")
        //do whatever init activities here.
    }
}


 //this method is called by the framework on         locationManager.requestLocation();
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    print("Did location updates is called")
    //store the user location here to firebase or somewhere 
}

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
    print("Did location updates is called but failed getting location \(error)")
}

}

Agora você pode codificar a chamada abaixo assim que o usuário fizer login no seu aplicativo. Quando requestLocation () é chamado, ele invoca didUpdateLocations acima e você pode armazenar o local no Firebase ou em qualquer outro lugar.

if CLLocationManager.locationServicesEnabled() {
            locationManager.requestLocation();
 }

se você estiver usando o GeoFire, no método didUpdateLocations acima, poderá armazenar o local como abaixo

geoFire?.setLocation(locations.first, forKey: uid) where uid is the user id who logged in to the app. I think you will know how to get UID based on your app sign in implementation. 

Por último, mas não menos importante, acesse o seu Info.plist e ative "Privacidade -Localização quando estiver em Use Usage Description".

Quando você usa o simulador para testá-lo, sempre oferece um local personalizado que você configurou em Simulador -> Depurar -> Local.


Olá, onde estão os locais (longitude, latitude), com que frequência é recarregada os locais?
Cristian Mora

@CristianMora quando o locationManager.requestLocation é chamado, este é chamado locationManager (_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) em que esta é uma matriz de Locais e você pode usá-los ou mostrar ao usuário para escolher o mais apropriado. locais é do tipo CLLocation e você pode obter latitude e longitude desse objeto. Se você precisar das informações do usuário apenas uma vez, não precisará recarregar os locais, caso contrário, poderá chamar requestLocation () conforme necessário. Exemplo de uma solicitação de pesquisa, você chama requestLocation () primeiro e, em seguida, com base na localização, fornece respostas.
Lyju I Edwinson

15

primeiro adicione duas estruturas em seu projeto

1: MapKit

2: Corelocation (não é mais necessário a partir do XCode 7.2.1)

Defina na sua turma

var manager:CLLocationManager!
var myLocations: [CLLocation] = []

então, no método viewDidLoad codifique isso

manager = CLLocationManager()
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestAlwaysAuthorization()
manager.startUpdatingLocation()

//Setup our Map View
mapobj.showsUserLocation = true

não esqueça de adicionar esses dois valores no arquivo plist

1: NSLocationWhenInUseUsageDescription

2: NSLocationAlwaysUsageDescription

11
import CoreLocation
import UIKit

class ViewController: UIViewController, CLLocationManagerDelegate {

    var locationManager: CLLocationManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
    } 

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        if status != .authorizedWhenInUse {return}
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()
        let locValue: CLLocationCoordinate2D = manager.location!.coordinate
        print("locations = \(locValue.latitude) \(locValue.longitude)")
    }
}

Como a chamada para requestWhenInUseAuthorizationé assíncrona, o aplicativo chama a locationManagerfunção depois que o usuário concede permissão ou a rejeita. Portanto, é adequado colocar sua localização recebendo código dentro dessa função, dada a permissão concedida pelo usuário. Este é o melhor tutorial sobre isso que encontrei .


10
 override func viewDidLoad() {

    super.viewDidLoad()       
    locationManager.requestWhenInUseAuthorization();     
    if CLLocationManager.locationServicesEnabled() {
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
        locationManager.startUpdatingLocation()
    }
    else{
        print("Location service disabled");
    }
  }

Esse é o seu modo de exibição carregado e na classe ViewController também inclui o método de atualização mapStart da seguinte maneira

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    var locValue : CLLocationCoordinate2D = manager.location.coordinate;
    let span2 = MKCoordinateSpanMake(1, 1)    
    let long = locValue.longitude;
    let lat = locValue.latitude;
    print(long);
    print(lat);        
    let loadlocation = CLLocationCoordinate2D(
                    latitude: lat, longitude: long            

   )     

    mapView.centerCoordinate = loadlocation;
    locationManager.stopUpdatingLocation();
}

Também não se esqueça de adicionar CoreLocation.FrameWork e MapKit.Framework ao seu projeto (não é mais necessário a partir do XCode 7.2.1 )


6

Uso:

Definir campo na classe

let getLocation = GetLocation()

Use na função de classe por código simples:

getLocation.run {
    if let location = $0 {
        print("location = \(location.coordinate.latitude) \(location.coordinate.longitude)")
    } else {
        print("Get Location failed \(getLocation.didFailWithError)")
    }
}

Classe:

import CoreLocation

public class GetLocation: NSObject, CLLocationManagerDelegate {
    let manager = CLLocationManager()
    var locationCallback: ((CLLocation?) -> Void)!
    var locationServicesEnabled = false
    var didFailWithError: Error?

    public func run(callback: @escaping (CLLocation?) -> Void) {
        locationCallback = callback
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
        manager.requestWhenInUseAuthorization()
        locationServicesEnabled = CLLocationManager.locationServicesEnabled()
        if locationServicesEnabled { manager.startUpdatingLocation() }
        else { locationCallback(nil) }
    }

   public func locationManager(_ manager: CLLocationManager,
                         didUpdateLocations locations: [CLLocation]) {
        locationCallback(locations.last!)
        manager.stopUpdatingLocation()
    }

    public func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        didFailWithError = error
        locationCallback(nil)
        manager.stopUpdatingLocation()
    }

    deinit {
        manager.stopUpdatingLocation()
    }
}


Não se esqueça de adicionar o "NSLocationWhenInUseUsageDescription" no info.plist.


1
Obrigado! Não se esqueça de adicionar o "NSLocationWhenInUseUsageDescription" no
info.plist

2
import Foundation
import CoreLocation

enum Result<T> {
  case success(T)
  case failure(Error)
}

final class LocationService: NSObject {
private let manager: CLLocationManager

init(manager: CLLocationManager = .init()) {
    self.manager = manager
    super.init()
    manager.delegate = self
}

var newLocation: ((Result<CLLocation>) -> Void)?
var didChangeStatus: ((Bool) -> Void)?

var status: CLAuthorizationStatus {
    return CLLocationManager.authorizationStatus()
}

func requestLocationAuthorization() {
    manager.delegate = self
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.requestWhenInUseAuthorization()
    if CLLocationManager.locationServicesEnabled() {
        manager.startUpdatingLocation()
        //locationManager.startUpdatingHeading()
    }
}

func getLocation() {
    manager.requestLocation()
}

deinit {
    manager.stopUpdatingLocation()
}

}

 extension LocationService: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
    newLocation?(.failure(error))
    manager.stopUpdatingLocation()
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if let location = locations.sorted(by: {$0.timestamp > $1.timestamp}).first {
        newLocation?(.success(location))
    }
      manager.stopUpdatingLocation()
}

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
    switch status {
    case .notDetermined, .restricted, .denied:
        didChangeStatus?(false)
    default:
        didChangeStatus?(true)
    }
}
}

Precisa escrever esse código no ViewController necessário.

 //NOTE:: Add permission in info.plist::: NSLocationWhenInUseUsageDescription


let locationService = LocationService()

 @IBAction func action_AllowButtonTapped(_ sender: Any) {
  didTapAllow()
 }

 func didTapAllow() {
   locationService.requestLocationAuthorization()
 }

 func getCurrentLocationCoordinates(){
   locationService.newLocation = {result in
     switch result {
      case .success(let location):
      print(location.coordinate.latitude, location.coordinate.longitude)
      case .failure(let error):
      assertionFailure("Error getting the users location \(error)")
   }
  }
}

    func getCurrentLocationCoordinates(){
    locationService.newLocation = {result in
        switch result {
        case .success(let location):
            print(location.coordinate.latitude, location.coordinate.longitude)
            CLGeocoder().reverseGeocodeLocation(location, completionHandler: {(placemarks, error) -> Void in
                if error != nil {
                    print("Reverse geocoder failed with error" + (error?.localizedDescription)!)
                    return
                }
                if (placemarks?.count)! > 0 {
                    print("placemarks", placemarks!)
                    let pmark = placemarks?[0]
                    self.displayLocationInfo(pmark)
                } else {
                    print("Problem with the data received from geocoder")
                }
            })
        case .failure(let error):
            assertionFailure("Error getting the users location \(error)")
        }
    }
}

0

Aqui está um exemplo de copiar e colar que funcionou para mim.

http://swiftdeveloperblog.com/code-examples/determine-users-current-location-example-in-swift/

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    var locationManager:CLLocationManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        determineMyCurrentLocation()
    }


    func determineMyCurrentLocation() {
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestAlwaysAuthorization()

        if CLLocationManager.locationServicesEnabled() {
            locationManager.startUpdatingLocation()
            //locationManager.startUpdatingHeading()
        }
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let userLocation:CLLocation = locations[0] as CLLocation

        // Call stopUpdatingLocation() to stop listening for location updates,
        // other wise this function will be called every time when user location changes.

       // manager.stopUpdatingLocation()

        print("user latitude = \(userLocation.coordinate.latitude)")
        print("user longitude = \(userLocation.coordinate.longitude)")
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
    {
        print("Error \(error)")
    }
}

-1
// its with strongboard 
@IBOutlet weak var mapView: MKMapView!

//12.9767415,77.6903967 - exact location latitude n longitude location 
let cooridinate = CLLocationCoordinate2D(latitude: 12.9767415 , longitude: 77.6903967)
let  spanDegree = MKCoordinateSpan(latitudeDelta: 0.2,longitudeDelta: 0.2)
let region = MKCoordinateRegion(center: cooridinate , span: spanDegree)
mapView.setRegion(region, animated: true)

-1

100% trabalhando no iOS Swift 4 por: Parmar Sajjad

Etapa 1: Vá para o GoogleDeveloper Api Console e crie seu ApiKey

Etapa 2: Saltar para o projeto instalar o pod do Cocoapods GoogleMaps

etapa 3: Goto AppDelegate.swift importe GoogleMaps e

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    GMSServices.provideAPIKey("ApiKey")
    return true
}

etapa 4: importar UIKit importar classe GoogleMaps ViewController: UIViewController, CLLocationManagerDelegate {

@IBOutlet weak var mapview: UIView!
let locationManager  = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()
    locationManagerSetting()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


func locationManagerSetting() {

    self.locationManager.delegate = self
    self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    self.locationManager.requestWhenInUseAuthorization()
    self.locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    self.showCurrentLocationonMap()
    self.locationManager.stopUpdatingLocation()
}
func showCurrentLocationonMap() {
    let
    cameraposition  = GMSCameraPosition.camera(withLatitude: (self.locationManager.location?.coordinate.latitude)!  , longitude: (self.locationManager.location?.coordinate.longitude)!, zoom: 18)
    let  mapviewposition = GMSMapView.map(withFrame: CGRect(x: 0, y: 0, width: self.mapview.frame.size.width, height: self.mapview.frame.size.height), camera: cameraposition)
    mapviewposition.settings.myLocationButton = true
    mapviewposition.isMyLocationEnabled = true

    let marker = GMSMarker()
    marker.position = cameraposition.target
    marker.snippet = "Macczeb Technologies"
    marker.appearAnimation = GMSMarkerAnimation.pop
    marker.map = mapviewposition
    self.mapview.addSubview(mapviewposition)

}

}

etapa 5: abra o arquivo info.plist e adicione abaixo Privacidade - Localização quando em uso Descrição do uso ...... abaixo do nome da base do arquivo principal do storyboard

Etapa 6: executar

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.