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