ios - usage - Encontrar la distancia entre los puntos CLLocationCoordinate2D
requestwheninuseauthorization (5)
Sé por la documentación que podemos encontrar la distancia entre dos puntos CLLocation
usando la función, distanceFromLocation:
Pero mi problema es que no tengo el tipo de datos CLLocation conmigo, tengo los puntos CLLocationCoordinate2D. Entonces, ¿cómo puedo encontrar la distancia entre dos puntos CLLocationCoordinate2D? He visto el post post pero no me ha servido de ayuda.
Debes crear un objeto de CLLocation usando,
- (id)initWithLatitude:(CLLocationDegrees)latitude
longitude:(CLLocationDegrees)longitude;
Entonces, deberías poder calcular la distancia usando
[location1 distanceFromLocation:location2];
Si está bien que usted obtenga la distancia en metros entre puntos, entonces
CLLocationCoordinate2D coordinate1 = <some value>
CLLocationCoordinate2D coordinate2 = <some value>
…
MKMapPoint point1 = MKMapPointForCoordinate(coordinate1);
MKMapPoint point2 = MKMapPointForCoordinate(coordinate2);
CLLocationDistance distance = MKMetersBetweenMapPoints(point1, point2);
Devolverá la distancia entre dos puntos. No es necesario crear CLLocation
dado por CLLocationCoordinate2D
. Esta definición está disponible desde iOS 4.0
Swift 4:
extension CLLocation {
/// Get distance between two points
///
/// - Parameters:
/// - from: first point
/// - to: second point
/// - Returns: the distance in meters
class func distance(from: CLLocationCoordinate2D, to: CLLocationCoordinate2D) -> CLLocationDistance {
let from = CLLocation(latitude: from.latitude, longitude: from.longitude)
let to = CLLocation(latitude: to.latitude, longitude: to.longitude)
return from.distance(to)
}
}
Swift4: combinados pensamientos anteriores
extension CLLocationCoordinate2D {
//distance in meters, as explained in CLLoactionDistance definition
func distance(from: CLLocationCoordinate2D) -> CLLocationDistance {
let destination=CLLocation(latitude:from.latitude,longitude:from.longitude)
return CLLocation(latitude: latitude, longitude: longitude).distance(from: destination)
}
}
let point1 = MKMapPointForCoordinate(myLocation)
let point2 = MKMapPointForCoordinate(friendLocation)
let distance = MKMetersBetweenMapPoints(point1, point2)/1000
let distanceStr = NSString(format: "%.3f", distance)
Versión simple de la respuesta de Valleri. Divide por 1000 para obtener KM seguido de conversión a cadena.