Buscar..
Filtro de distancia utilizando
Ejemplo:
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = 5;
Por ejemplo, en el código de ejemplo anterior, los cambios de ubicación de menos de 5 metros no se enviarán a la devolución de llamada, sino que se ignorarán.
Obtener la ubicación del usuario usando CLLocationManager
1 - Incluya el CoreLocation.framework en su proyecto; Esto se logra haciendo clic en:
root directory -> build phases -> Link Binary With Libraries
Haga clic en el botón (+), busque CoreLocation.framework y haga clic en agregar.
2- Modifique el archivo info.plist para solicitar permiso para usar la ubicación del usuario abriéndolo como código fuente. Agregue cualquiera de los siguientes pares clave: valor debajo de la etiqueta para solicitar el uso de la ubicación del usuario mientras la aplicación está en uso:
<key>NSLocationWhenInUseUsageDescription</key>
<string>message to display when asking for permission</string>
3- Importar CoreLocation al ViewController que lo utilizará.
import CoreLocation
4- Asegúrese de que su ViewController cumpla con el protocolo CLLocationManagerDelagate
class ViewController: UIViewController,CLLocationManagerDelegate {}
Después de estos pasos, podemos crear un objeto CLLocationManager como variable de instancia y usarlo en ViewController.
var manager:CLLocationManager!
No usamos 'vamos' aquí porque modificaremos el administrador para especificar su delegado, la distancia mínima antes del evento de actualización y su precisión
//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()
}
Ahora, para obtener acceso a las actualizaciones de ubicación, podemos implementar la función a continuación, que se denomina tiempo extra al que se alcanza el filtro de distancia.
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {}
El parámetro de ubicación es una matriz de objetos CLLocation que representan la ubicación real del dispositivo. Desde estos objetos, uno puede obtener acceso a los siguientes atributos: coordinate,altitude, floor, horizontalAccuracy, verticalAccuracy, timestamp, description, course, speed
precisión coordinate,altitude, floor, horizontalAccuracy, verticalAccuracy, timestamp, description, course, speed
precisión coordinate,altitude, floor, horizontalAccuracy, verticalAccuracy, timestamp, description, course, speed
y una distance(from:)
función distance(from:)
que mide la distancia entre dos ubicaciones.
Nota: al solicitar permiso para la ubicación, hay dos tipos diferentes de autorización.
La autorización "Cuando está en uso" solo otorga permiso a la aplicación para recibir su ubicación cuando la aplicación está en uso o en primer plano.
La autorización "Siempre" le otorga a la aplicación permisos de fondo que pueden reducir la duración de la batería en caso de que la aplicación esté cerrada.
Archivo de plist debe ajustarse según sea necesario.