Abrufen des aktuellen Standorts / der aktuellen Koordinaten des Benutzers

194

Wie kann ich den aktuellen Standort des Benutzers speichern und den Standort auch auf einer Karte anzeigen?

Ich kann vordefinierte Koordinaten auf einer Karte anzeigen. Ich weiß nur nicht, wie ich Informationen vom Gerät empfangen soll.

Ich weiß auch, dass ich einige Elemente zu einer Liste hinzufügen muss. Wie kann ich das machen?

Awais Hussain
quelle

Antworten:

225

Um den aktuellen Standort eines Benutzers abzurufen, müssen Sie Folgendes deklarieren:

let locationManager = CLLocationManager()

In müssen viewDidLoad()Sie die CLLocationManagerKlasse wie folgt instanziieren :

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

In der CLLocationManagerDelegate-Methode können Sie dann die aktuellen Standortkoordinaten des Benutzers abrufen:

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

In der info.plist müssen Sie hinzufügen NSLocationAlwaysUsageDescription und Ihre benutzerdefinierte Warnmeldung wie; AppName (Demo App) möchte Ihren aktuellen Standort verwenden.

Annu
quelle
60
Vergessen Sie nicht, Import MapKit+ CoreLocation+ CLLocationManagerDelegatein die Klassendefinition aufzunehmen.
Lukesivi
7
@ Yusha Wenn dies für Sie wie Objective-C aussieht, dann haben Sie Objective-C (noch Swift)
Martin Marconcini
4
Sie haben vergessen, die Implementierung des CLLocationManagerDelegate-Protokolls zu erwähnen.
SSD352
13
NSLocationAlwaysUsageDescriptionwurde umbenannt inPrivacy - Location Always Usage Description
Saoud Rizwan
4
Sie müssen locationManagerals globale Variable anstelle einer lokalen Variablen inviewDidLoad
chengsam
100

Sie sollten diese Schritte ausführen:

  1. CoreLocation.frameworkzu BuildPhases hinzufügen -> Binär mit Bibliotheken verknüpfen (ab XCode 7.2.1 nicht mehr erforderlich)
  2. CoreLocationin Ihre Klasse importieren - höchstwahrscheinlich ViewController.swift
  3. Fügen Sie CLLocationManagerDelegateIhrer Klassendeklaration hinzu
  4. hinzufügen NSLocationWhenInUseUsageDescriptionund NSLocationAlwaysUsageDescriptionplist
  5. Init Location Manager:

    locationManager = CLLocationManager()
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()
  6. Benutzerstandort abrufen von:

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let locValue:CLLocationCoordinate2D = manager.location!.coordinate
        print("locations = \(locValue.latitude) \(locValue.longitude)")
    }
itzhar
quelle
3
neue Funktion: func locationManager (Manager: CLLocationManager, didUpdateLocations-Speicherorte: [CLLocation])
user523234
Schritt für Schritt antworten. Aber bitte aktualisieren Sie es. Es funktioniert momentan nicht.
Dheeraj D
59

Update für iOS 12.2 mit Swift 5

Sie müssen die folgenden Datenschutzberechtigungen in die plist-Datei aufnehmen

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

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

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

So bin ich

Abrufen des aktuellen Standorts und Anzeigen auf der Karte in Swift 2.0

Stellen Sie sicher, dass Sie Ihrem Projekt CoreLocation- und MapKit- Framework hinzugefügt haben (dies ist in XCode 7.2.1 nicht erforderlich).

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

Hier ist der Ergebnisbildschirm

Ein Screenshot der Karte in Mumbai

swiftBoy
quelle
Ich führe Ihren Code aus und erhalte einen leeren weißen Bildschirm. Gibt es eine Ansicht oder etwas, das ich dem Storyboard hinzufügen muss?
ThisClark
1
Hat in Swift 4 hervorragend funktioniert, musste nur einen Unterstrich hinzufügen (von Xcode dazu aufgefordert), sodass die locationManager-Zeile zu: func locationManager (_ manager: CLLocationManager, didUpdateLocations-Standorte: [CLLocation]) wurde
Elijah Lofgren
32

Bibliothek importieren wie:

import CoreLocation

Delegat festlegen:

CLLocationManagerDelegate

Nehmen Sie eine Variable wie:

var locationManager:CLLocationManager!

Schreiben Sie auf viewDidLoad () diesen hübschen Code:

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

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

Schreiben Sie CLLocation-Delegatmethoden:

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

Legen Sie nun die Berechtigung für den Zugriff auf den Speicherort fest. Fügen Sie diesen Schlüsselwert in Ihre Datei info.plist ein

 <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>

Geben Sie hier die Bildbeschreibung ein

100% arbeiten ohne Probleme. GEPRÜFT

Mr.Javed Multani
quelle
Ich habe eine andere Sprache, dann funktioniert es nicht. Ich möchte nur Englisch.
Maulik Shah
29

@wonderwhy Ich habe meinen Code-Screenshot hinzugefügt.  Bitte überprüfen.  Sie müssen <code> NSLocationWhenInUseUsageDescription zur Autorisierung in die Liste einfügen. </ Code>

NSLocationWhenInUseUsageDescription = Fordern Sie die Berechtigung zur Verwendung des Standortdienstes an, wenn sich die Apps im Hintergrund befinden. in Ihrer Plist-Datei.

Wenn dies funktioniert, stimmen Sie bitte über die Antwort ab.

Annu
quelle
1
Sie können Ihre Antwort mehr erklären, indem Sie
code.if
16
Es wäre schön, wenn der Codeausschnitt die Markup-Sprache verwenden würde, anstatt einen Screenshot einzufügen
Nicholas Allio
25

Importieren Sie zuerst die Corelocation- und MapKit-Bibliothek:

import MapKit
import CoreLocation

erben von CLLocationManagerDelegate an unsere Klasse

class ViewController: UIViewController, CLLocationManagerDelegate

Erstellen Sie eine locationManager-Variable. Dies sind Ihre Standortdaten

var locationManager = CLLocationManager()

Erstellen Sie eine Funktion, um die Standortinformationen abzurufen. Seien Sie genau, diese genaue Syntax funktioniert:

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

Erstellen Sie in Ihrer Funktion eine Konstante für den aktuellen Standort des Benutzers

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

Wenn Sie die Aktualisierung des Standorts beenden, verhindert dies, dass Ihr Gerät das Fenster ständig ändert, um Ihren Standort während der Bewegung zu zentrieren (Sie können dies weglassen, wenn Sie möchten, dass es anders funktioniert).

manager.stopUpdatingLocation()

Abrufen der Benutzerkoordinate von userLocatin, das Sie gerade definiert haben:

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

Definieren Sie, wie gezoomt Ihre Karte sein soll:

let span = MKCoordinateSpanMake(0.2,0.2) Kombinieren Sie diese beiden, um die Region zu erhalten:

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

Stellen Sie nun die Region ein und wählen Sie, ob sie mit Animation dorthin gehen soll oder nicht

mapView.setRegion(region, animated: true)

Schließen Sie Ihre Funktion }

Über Ihre Schaltfläche oder auf andere Weise möchten Sie locationManagerDeleget auf self setzen

Lassen Sie nun den Ort anzeigen

Genauigkeit bestimmen

locationManager.desiredAccuracy = kCLLocationAccuracyBest

autorisieren:

 locationManager.requestWhenInUseAuthorization()

Um den Ortungsdienst autorisieren zu können, müssen Sie diese beiden Zeilen zu Ihrer Liste hinzufügen

Geben Sie hier die Bildbeschreibung ein

Ort abrufen:

locationManager.startUpdatingLocation()

Zeigen Sie es dem Benutzer:

mapView.showsUserLocation = true

Dies ist mein vollständiger Code:

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
quelle
20

Swift 3.0

Wenn Sie den Benutzerstandort nicht in der Karte anzeigen möchten, sondern nur in Firebase oder an einem anderen Ort speichern möchten, führen Sie die folgenden Schritte aus.

import MapKit
import CoreLocation

Verwenden Sie jetzt CLLocationManagerDelegate auf Ihrem VC und Sie müssen die letzten drei unten gezeigten Methoden überschreiben. Mit diesen Methoden können Sie sehen, wie Sie mit der requestLocation () -Methode den aktuellen Benutzerstandort ermitteln.

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

}

Jetzt können Sie den folgenden Anruf codieren, sobald sich der Benutzer bei Ihrer App angemeldet hat. Wenn requestLocation () aufgerufen wird, wird didUpdateLocations oben weiter aufgerufen, und Sie können den Speicherort in Firebase oder an einem anderen Ort speichern.

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

Wenn Sie GeoFire verwenden, können Sie in der obigen didUpdateLocations-Methode den Speicherort wie folgt speichern

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. 

Zu guter Letzt gehen Sie zu Ihrer Info.plist und aktivieren Sie "Datenschutz - Standort bei Verwendung Verwendungsbeschreibung".

Wenn Sie den Simulator zum Testen verwenden, erhalten Sie immer einen benutzerdefinierten Speicherort, den Sie unter Simulator -> Debug -> Speicherort konfiguriert haben.

Lyju ich Edwinson
quelle
Hallo, wo sind die Standorte (Längen- und Breitengrad), wie oft werden die Standorte neu geladen?
Cristian Mora
@CristianMora Wenn die locationManager.requestLocation aufgerufen wird, wird diese aufgerufen. LocationManager (_ manager: CLLocationManager, didUpdateLocations location: [CLLocation]), wobei dies ein Locations-Array ist und Sie eines davon verwenden oder dem Benutzer anzeigen können, um das am besten geeignete auszuwählen. location ist vom Typ CLLocation und Sie können longitudd, width von diesem Objekt abrufen. Wenn Sie die Benutzerinformationen nur einmal benötigen, müssen Sie keine Standorte neu laden, andernfalls können Sie requestLocation () nach Bedarf aufrufen. Beispiel für eine Suchanfrage: Sie rufen zuerst requestLocation () auf und geben dann basierend auf dem Standort Antworten.
Lyju I Edwinson
15

Fügen Sie zunächst zwei Frameworks in Ihr Projekt ein

1: MapKit

2: Corelocation (ab XCode 7.2.1 nicht mehr erforderlich)

Definieren Sie in Ihrer Klasse

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

dann in viewDidLoad Methodencode dies

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

//Setup our Map View
mapobj.showsUserLocation = true

Vergessen Sie nicht, diese beiden Werte in die plist-Datei aufzunehmen

1: NSLocationWhenInUseUsageDescription

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

Da der Aufruf von requestWhenInUseAuthorizationasynchron ist, ruft die App die locationManagerFunktion auf, nachdem der Benutzer die Berechtigung erteilt oder abgelehnt hat. Daher ist es richtig, Ihren Standort, der Code erhält, innerhalb dieser Funktion zu platzieren, sofern der Benutzer die Berechtigung erteilt hat. Dies ist das beste Tutorial dazu, das ich darauf gefunden habe .

ScottyBlades
quelle
10
 override func viewDidLoad() {

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

Dies ist Ihre Methode zum Laden der Ansicht und enthält in der ViewController-Klasse auch die MapStart-Aktualisierungsmethode wie folgt

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

Auch vergessen Sie nicht , CoreLocation.FrameWork und MapKit.Framework in einem Projekt hinzuzufügen (nicht mehr notwendig , da die XCode 7.2.1 )

Tek Raj
quelle
6

Verwendung:

Feld in der Klasse definieren

let getLocation = GetLocation()

Verwendung in Funktion der Klasse durch einfachen Code:

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

Klasse:

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


Vergessen Sie nicht, die "NSLocationWhenInUseUsageDescription" in die info.plist aufzunehmen.

Renetik
quelle
1
Vielen Dank! Vergessen Sie nicht, die "NSLocationWhenInUseUsageDescription" in die info.plist aufzunehmen
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)
    }
}
}

Muss diesen Code in den erforderlichen ViewController schreiben.

 //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
quelle
0

Hier ist ein Beispiel zum Kopieren und Einfügen, das für mich funktioniert hat.

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
quelle
-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
quelle
-1

100% arbeiten in iOS Swift 4 von: Parmar Sajjad

Schritt 1: Gehen Sie zu GoogleDeveloper Api Console und erstellen Sie Ihren ApiKey

Schritt 2: Gehen Sie zu Project und installieren Sie den Cocoapods GoogleMaps-Pod

Schritt 3: Gehen Sie zu AppDelegate.swift, importieren Sie GoogleMaps und

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

    GMSServices.provideAPIKey("ApiKey")
    return true
}

Schritt 4: UIKit importieren GoogleMaps-Klasse importieren 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)

}

}}

Schritt 5: Öffnen Sie die Datei info.plist und fügen Sie unten hinzu. Datenschutz - Speicherort bei Verwendung Verwendung Beschreibung ...... unter einem Basis-Storyboard-Basisdaten

Schritt 6: Ausführen

Sajjad Parmar
quelle