Obtenir l'emplacement actuel / les coordonnées de l'utilisateur

194

Comment puis-je enregistrer l'emplacement actuel de l'utilisateur et également afficher l'emplacement sur une carte?

Je suis capable d'afficher des coordonnées prédéfinies sur une carte, je ne sais tout simplement pas comment recevoir des informations de l'appareil.

Je sais aussi que je dois ajouter quelques éléments dans une liste. Comment puis je faire ça?

Awais Hussain
la source

Réponses:

225

Pour obtenir l'emplacement actuel d'un utilisateur, vous devez déclarer:

let locationManager = CLLocationManager()

Dans viewDidLoad()vous devez instancier la CLLocationManagerclasse, comme ceci:

// 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()
}

Ensuite, dans la méthode CLLocationManagerDelegate, vous pouvez obtenir les coordonnées de l'emplacement actuel de l'utilisateur:

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

Dans l'info.plist, vous devrez ajouter NSLocationAlwaysUsageDescription et votre message d'alerte personnalisé comme; AppName (Demo App) souhaite utiliser votre position actuelle.

Annu
la source
60
N'oubliez pas d' ajouter Import MapKit+ CoreLocation+ CLLocationManagerDelegatedans la définition de classe.
Lukesivi
7
@Yusha Si cela vous ressemble à Objective-C, alors vous n'avez jamais vu Objective-C (ni Swift)
Martin Marconcini
4
Vous avez oublié de mentionner l'implémentation du protocole CLLocationManagerDelegate.
ssd352
13
NSLocationAlwaysUsageDescriptiona été renomméPrivacy - Location Always Usage Description
Saoud Rizwan
4
Vous DEVEZ déclarer en locationManagertant que variable globale au lieu d'une variable locale dansviewDidLoad
chengsam
100

vous devez suivre ces étapes:

  1. ajouter CoreLocation.framework à BuildPhases -> Lier le binaire aux bibliothèques (plus nécessaire à partir de XCode 7.2.1)
  2. importer CoreLocationdans votre classe - probablement ViewController.swift
  3. ajouter CLLocationManagerDelegateà votre déclaration de classe
  4. ajouter NSLocationWhenInUseUsageDescriptionet NSLocationAlwaysUsageDescriptionà plist
  5. init location manager:

    locationManager = CLLocationManager()
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()
  6. obtenir l'emplacement de l'utilisateur par:

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let locValue:CLLocationCoordinate2D = manager.location!.coordinate
        print("locations = \(locValue.latitude) \(locValue.longitude)")
    }
itzhar
la source
3
nouvelle fonction: func locationManager (gestionnaire: CLLocationManager, didUpdateLocations locations: [CLLocation])
user523234
Réponse étape par étape. Mais veuillez le mettre à jour. Cela ne fonctionne pas pour l'instant.
Dheeraj D
59

Mise à jour pour iOS 12.2 avec Swift 5

vous devez ajouter les autorisations de confidentialité suivantes dans le fichier plist

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

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

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

Voici comment je suis

obtenir l'emplacement actuel et l'afficher sur la carte dans Swift 2.0

Assurez-vous que vous avez ajouté le framework CoreLocation et MapKit à votre projet (cela n'est pas requis avec 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)
    }
}

Voici l'écran de résultat

une capture d'écran de la carte, centrée à Mumbai

swiftBoy
la source
J'exécute votre code et j'obtiens un écran blanc vierge. Y a-t-il une vue ou quelque chose que je dois ajouter au storyboard?
ThisClark
1
Ça a très bien fonctionné pour moi dans Swift 4, je n'ai eu qu'à ajouter un trait de soulignement (invité par Xcode) pour que la ligne locationManager devienne: func locationManager (_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
Elijah Lofgren
32

Importer une bibliothèque comme:

import CoreLocation

définir délégué:

CLLocationManagerDelegate

Prenez une variable comme:

var locationManager:CLLocationManager!

Sur viewDidLoad () écrivez ce joli code:

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

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

Écrire des méthodes de délégué 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)")
}

Maintenant, définissez la permission d'accéder à l'emplacement, alors ajoutez ces valeurs de clé dans votre fichier 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>

entrez la description de l'image ici

100% de travail sans aucun problème. TESTÉ

Mr.Javed Multani
la source
j'ai une autre langue alors ça ne marche pas. je veux seulement la langue anglaise.
Maulik shah du
29

@wonderwhy J'ai ajouté ma capture d'écran de code.  pls le vérifier.  Vous devrez ajouter <code> NSLocationWhenInUseUsageDescription dans le plist pour autorisation. </code>

NSLocationWhenInUseUsageDescription = Demander l'autorisation d'utiliser le service de localisation lorsque les applications sont en arrière-plan. dans votre fichier plist.

Si cela fonctionne, veuillez voter la réponse.

Annu
la source
1
vous pouvez expliquer votre réponse plus en ajoutant du code. si vous le souhaitez
Krutarth Patel
16
ce serait bien d'avoir l'extrait de code en utilisant le langage de balisage plutôt que de coller une capture d'écran
Nicholas Allio
25

Première importation Corelocation et bibliothèque MapKit:

import MapKit
import CoreLocation

hériter de CLLocationManagerDelegate à notre classe

class ViewController: UIViewController, CLLocationManagerDelegate

créer une variable locationManager, ce seront vos données de localisation

var locationManager = CLLocationManager()

créer une fonction pour obtenir les informations de localisation, soyez précis, cette syntaxe exacte fonctionne:

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

dans votre fonction créer une constante pour l'emplacement actuel des utilisateurs

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

arrêter la mise à jour de l'emplacement, cela empêche votre appareil de changer constamment la fenêtre pour centrer votre emplacement pendant le déplacement (vous pouvez l'omettre si vous souhaitez qu'il fonctionne autrement)

manager.stopUpdatingLocation()

obtenir les coordonnées des utilisateurs à partir de userLocatin que vous venez de définir:

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

définissez le zoom de votre carte:

let span = MKCoordinateSpanMake(0.2,0.2) combinez ces deux pour obtenir la région:

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

définissez maintenant la région et choisissez si vous voulez qu'elle y soit animée ou non

mapView.setRegion(region, animated: true)

fermez votre fonction }

à partir de votre bouton ou d'une autre manière que vous souhaitez définir le locationManagerDeleget sur self

permet maintenant d'afficher l'emplacement

désigner la précision

locationManager.desiredAccuracy = kCLLocationAccuracyBest

autoriser:

 locationManager.requestWhenInUseAuthorization()

pour pouvoir autoriser le service de localisation, vous devez ajouter ces deux lignes à votre liste

entrez la description de l'image ici

obtenir l'emplacement:

locationManager.startUpdatingLocation()

montrez-le à l'utilisateur:

mapView.showsUserLocation = true

Voici mon code complet:

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)

    }
}
MiladiuM
la source
20

Swift 3.0

Si vous ne souhaitez pas afficher l'emplacement de l'utilisateur sur la carte, mais souhaitez simplement le stocker dans Firebase ou ailleurs, procédez comme suit,

import MapKit
import CoreLocation

Utilisez maintenant CLLocationManagerDelegate sur votre VC et vous devez remplacer les trois dernières méthodes indiquées ci-dessous. Vous pouvez voir comment la méthode requestLocation () vous obtiendra l'emplacement utilisateur actuel à l'aide de ces méthodes.

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

}

Vous pouvez maintenant coder l'appel ci-dessous une fois que l'utilisateur s'est connecté à votre application. Lorsque requestLocation () est invoqué, il invoquera en outre didUpdateLocations ci-dessus et vous pouvez stocker l'emplacement dans Firebase ou n'importe où ailleurs.

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

si vous utilisez GeoFire, dans la méthode didUpdateLocations ci-dessus, vous pouvez stocker l'emplacement comme ci-dessous

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. 

Enfin et surtout, accédez à votre Info.plist et activez "Confidentialité - Emplacement lorsque vous utilisez la description d'utilisation".

Lorsque vous utilisez le simulateur pour le tester, il vous donne toujours un emplacement personnalisé que vous avez configuré dans Simulateur -> Débogage -> Emplacement.

Lyju I Edwinson
la source
Salut, Où sont les emplacements (longitude, latitude), Quelle est la fréquence de rechargement des emplacements?
Cristian Mora
@CristianMora lorsque locationManager.requestLocation est invoqué, il s'agit de locationManager (_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) où il s'agit d'un tableau Locations et vous pouvez en utiliser une ou montrer à l'utilisateur de choisir la plus appropriée. locations est de type CLLocation et vous pouvez obtenir la latitude et la latitude à partir de cet objet.Si vous n'avez besoin des informations utilisateur qu'une seule fois, vous n'avez pas besoin de recharger les emplacements, sinon vous pouvez appeler requestLocation () selon les besoins. Exemple d'une demande de recherche, vous appelez d'abord requestLocation (), puis en fonction de l'emplacement, donnez des réponses.
Lyju I Edwinson
15

ajoutez d'abord deux cadres dans votre projet

1: MapKit

2: Corelocation (plus nécessaire à partir de XCode 7.2.1)

Définissez dans votre classe

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

puis dans la méthode viewDidLoad, codez ce

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

//Setup our Map View
mapobj.showsUserLocation = true

n'oubliez pas d'ajouter ces deux valeurs dans le fichier plist

1: NSLocationWhenInUseUsageDescription

2: NSLocationAlwaysUsageDescription
Krutarth Patel
la source
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)")
    }
}

Étant donné que l'appel à requestWhenInUseAuthorizationest asynchrone, l'application appelle la locationManagerfonction une fois que l'utilisateur a accordé l'autorisation ou l'a refusée. Par conséquent, il convient de placer votre emplacement pour obtenir le code à l'intérieur de cette fonction, compte tenu de l'autorisation accordée à l'utilisateur. C'est le meilleur tutoriel que j'ai trouvé là-dessus .

ScottyBlades
la source
10
 override func viewDidLoad() {

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

Il s'agit de votre méthode d'affichage de chargement et dans la classe ViewController, incluez également la méthode de mise à jour mapStart comme suit

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();
}

Aussi ne pas oublier d'ajouter CoreLocation.FrameWork et MapKit.Framework dans votre projet (plus nécessaire que de XCode 7.2.1 )

Tek Raj
la source
6

Usage:

Définir un champ en classe

let getLocation = GetLocation()

Utilisation en fonction de classe par code simple:

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'oubliez pas d'ajouter la "NSLocationWhenInUseUsageDescription" dans info.plist.

Renetik
la source
1
Merci! N'oubliez pas d'ajouter la "NSLocationWhenInUseUsageDescription" dans le info.plist
Jonas Deichelmann
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)
    }
}
}

Doit écrire ce code dans ViewController requis.

 //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)")
        }
    }
}
Mannam Brahmam
la source
0

voici un exemple de copier-coller qui a fonctionné pour moi.

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)")
    }
}
Eric Stevenson
la source
-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)
Ramanaraynan
la source
-1

100% travaillant dans iOS Swift 4 par: Parmar Sajjad

Étape 1: Allez sur GoogleDeveloper Api Console et créez votre ApiKey

Étape 2: Goto Project installe Cocoapods GoogleMaps pod

étape 3: Goto AppDelegate.swift importez GoogleMaps et

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

    GMSServices.provideAPIKey("ApiKey")
    return true
}

étape 4: importer UIKit importer la 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)

}

}

étape 5: ouvrez le fichier info.plist et ajoutez ci-dessous Confidentialité - Emplacement lors de l'utilisation Description de l'utilisation ...... sous un nom de base de fichier de storyboard principal

étape 6: exécuter

Sajjad Parmar
la source