2012-06-18 14 views
26

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 datos de CLLocation conmigo, tengo los puntos CLLocationCoordinate2D. Entonces, ¿cómo puedo encontrar la distancia entre dos puntos CLLocationCoordinate2D? He visto la publicación post pero no me ha ayudado.Encontrar la distancia entre CLLocationCoordinate2D puntos

+0

cálculos de distancia son en realidad bastante complicado. Deberías echarle un vistazo a CLLocation. –

+0

¿tiene latitud y longitud luego crea una clúster y luego usa CLLocationDistance meters = [newLocation distanceFromLocation: oldLocation]; –

+0

Comprobar esto: [distanceFromLocation - Calcular la distancia entre dos puntos] [1] [1]: http://stackoverflow.com/questions/3905896/distancefromlocation-calculate-distance-between-two-points – webmastx

Respuesta

31

Debe crear un objeto de CLLocation usando,

- (id)initWithLatitude:(CLLocationDegrees)latitude 
    longitude:(CLLocationDegrees)longitude; 

Ahora usarlo, usted puede encontrar la distancia.

+5

Con el código CLLocationDistance distance = [aCLLocationA distanceFromLocation: aCLLocationB]; // distancia es un doble que representa la distancia en metros (Fuente - http://stackoverflow.com/a/10432069/1364174) –

+0

No necesita crear CLLocation para obtener distancia entre puntos. Por favor, mire mi respuesta en la parte inferior –

14

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

Pero creo que de la misma familia: extensión CLLocationCoordinate2D {// En meteres func distancia (# para: CLLocationCoordinate2D) -> CLLocationDistance { let de CLLocation = (latitud: self.latitude, longitud: self.longitude) let a = CLLocation (latitud: to.latitude, longitud: to.longitude) retorno from.distanceFromLocation (a) }} – kwerle

23

Si está bien para que usted pueda obtener la distancia en metros entre los 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 necesita crear CLLocation dando CLLocationCoordinate2D. Esto define están disponibles desde iOS 4.0

+0

funciona bien para mí – VBaarathi

5
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. Divida por 1000 para obtener KM seguido de la conversión a cadena.

+0

que no trabaja para sWIFT 3. –

3

Swift4: combinado por encima de pensamientos

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