Ricerca…


Filtro a distanza usando

Esempio :

   CLLocationManager *locationManager = [[CLLocationManager alloc] init];
   locationManager.delegate = self;
   locationManager.desiredAccuracy = kCLLocationAccuracyBest;
   locationManager.distanceFilter = 5;

Ad esempio, nel codice di esempio sopra riportato, le modifiche di posizione inferiori a 5 metri non verranno inviate al callback, ma saranno ignorate.

Ottieni posizione utente con CLLocationManager

1 - Includi il CoreLocation.framework nel tuo progetto; questo si ottiene facendo clic su:

root directory -> build phases -> Link Binary With Libraries

Fare clic sul pulsante (+), cercare CoreLocation.framework e fare clic su Aggiungi.

2- Modificare il file info.plist per chiedere il permesso di utilizzare la posizione dell'utente aprendolo come codice sorgente. Aggiungi una delle seguenti chiavi: coppia di valori sotto il tag per chiedere l'utilizzo della posizione dell'utente mentre l'applicazione è in uso:

<key>NSLocationWhenInUseUsageDescription</key>
<string>message to display when asking for permission</string>

3- importare CoreLocation sul ViewController che lo utilizzerà.

import CoreLocation

4- Assicurati che ViewController sia conforme al protocollo CLLocationManagerDelagate

class ViewController: UIViewController,CLLocationManagerDelegate {}

Dopo questi passaggi, possiamo creare un oggetto CLLocationManager come variabile di istanza e utilizzarlo nel ViewController.

var manager:CLLocationManager!

Non usiamo 'let' qui perché modificheremo il gestore per specificare il suo delegato, la distanza minima prima dell'evento di aggiornamento e la sua precisione

//initialize the manager
manager = CLLocationManager()

//specify delegate
manager.delegate = self

//set the minimum distance the phone needs to move before an update event is triggered (for example:  100 meters)
manager.distanceFilter = 100

//set Accuracy to any of the following depending on your use case

//let kCLLocationAccuracyBestForNavigation: CLLocationAccuracy
//let kCLLocationAccuracyBest: CLLocationAccuracy
//let kCLLocationAccuracyNearestTenMeters: CLLocationAccuracy
//let kCLLocationAccuracyHundredMeters: CLLocationAccuracy
//let kCLLocationAccuracyKilometer: CLLocationAccuracy
//let kCLLocationAccuracyThreeKilometers: CLLocationAccuracy

manager.desiredAccuracy = kCLLocationAccuracyBest

//ask the user for permission
manager.requestWhenInUseAuthorization()

//Start collecting location information
if #available(iOS 9.0, *) {
            
   manager.requestLocation()
            
 } else {
  
   manager.startUpdatingLocation()
  
  }

Ora per ottenere l'accesso agli aggiornamenti di posizione, possiamo implementare la funzione di sotto che è chiamata tempo straordinario in cui viene raggiunto distanceFilter.

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

Il parametro locations è una matrice di oggetti CLLocation che rappresentano la posizione effettiva del dispositivo. Da questi oggetti, è possibile accedere ai seguenti attributi: coordinate,altitude, floor, horizontalAccuracy, verticalAccuracy, timestamp, description, course, speed e una distance(from:) funzione distance(from:) che misura la distanza tra due posizioni.

Nota: mentre si richiede l'autorizzazione per la posizione, esistono due diversi tipi di autorizzazione.

L'autorizzazione "Quando in uso" autorizza l'app a ricevere la tua posizione solo quando l'app è in uso o in primo piano.

Autorizzazione "sempre", fornisce le autorizzazioni in background dell'app che possono portare a ridurre la durata della batteria nel caso in cui l'app sia chiusa.

Il file Plist deve essere regolato secondo necessità.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow