2012-06-18 42 views
26

So dalla documentazione che possiamo trovare la distanza tra due punti CLLocation utilizzando la funzione, distanceFromLocation:. Ma il mio problema è che non ho il tipo di dati CLLocation con me, ho i punti CLLocationCoordinate2D. Quindi, come posso trovare la distanza tra due punti CLLocationCoordinate2D. Ho visto il post post ma non utile per me.Ricerca della distanza tra CLLocationCoordinate2D punti

+0

calcoli di distanza sono in realtà abbastanza difficile. Dovresti davvero dare una seconda occhiata a CLLocation. –

+0

ha lat e long quindi crea cllocation e quindi usa CLLocationDistance meters = [newLocation distanceFromLocation: oldLocation]; –

+0

Controllare questo: [distanceFromLocation - calcolare la distanza tra due punti] [1] [1]: http://stackoverflow.com/questions/3905896/distancefromlocation-calculate-distance-between-two-points – webmastx

risposta

31

È necessario creare un oggetto di CLLocation usando,

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

Ora usarlo, è possibile trovare la distanza.

+5

Con il codice CLLocationDistance distance = [aCLLocationA distanceFromLocation: aCLLocationB]; // distance è un double che rappresenta la distanza in metri (Source - http://stackoverflow.com/a/10432069/1364174) –

+0

Non è necessario creare CLLocation per ottenere la distanza tra i punti. Si prega di guardare la mia risposta in fondo –

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

Ma penso che più simile a questo: estensione CLLocationCoordinate2D {// In meteres func distanza (#to: CLLocationCoordinate2D) -> CLLocationDistance { let da = CLLocation (latitudine: self.latitude, longitudine: self.longitude) let a = CLLocation (latitudine: to.latitude, longitudine: to.longitude) ritorno from.distanceFromLocation (a) }} – kwerle

23

Se è ok per voi per ottenere la distanza in metri tra i punti, quindi

CLLocationCoordinate2D coordinate1 = <some value> 
CLLocationCoordinate2D coordinate2 = <some value> 
… 
MKMapPoint point1 = MKMapPointForCoordinate(coordinate1); 
MKMapPoint point2 = MKMapPointForCoordinate(coordinate2); 
CLLocationDistance distance = MKMetersBetweenMapPoints(point1, point2); 

restituirà la distanza tra due punti. Non è necessario creare CLLocation dato CLLocationCoordinate2D. Questo definisce sono disponibili da iOS 4.0

+0

funziona bene per me – VBaarathi

5
let point1 = MKMapPointForCoordinate(myLocation) 
    let point2 = MKMapPointForCoordinate(friendLocation) 
    let distance = MKMetersBetweenMapPoints(point1, point2)/1000 
    let distanceStr = NSString(format: "%.3f", distance) 

Versione semplice della risposta di Valleri. Dividi per 1000 per ottenere KM seguito dalla conversione in stringa.

+0

non funziona per rapida 3. –

3

Swift4: combinato sopra pensieri

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) 
    } 
} 
Problemi correlati