2012-06-18 25 views
26

Ich weiß aus der Dokumentation, dass wir den Abstand zwischen zwei CLLocation Punkten mit der Funktion distanceFromLocation: finden können. Aber mein Problem ist, dass ich CLLocation-Datentyp nicht mit mir habe, ich habe die CLLocationCoordinate2D Punkte. Wie kann ich den Abstand zwischen zwei CLLocationCoordinate2D-Punkten finden? Ich habe den Beitrag post gesehen, aber nicht hilfreich für mich.Ermitteln der Entfernung zwischen CLLocationCoordinate2D Punkten

+0

Entfernung Berechnungen sind eigentlich recht schwierig. Sie sollten sich wirklich einen zweiten Blick auf CLLocation werfen. –

+0

Haben Sie lat und lange dann erstellen Sie cLocation und verwenden Sie CLLocationDistance Meter = [newLocation distanceFromLocation: oldLocation]; –

+0

prüfen this: [distanceFromLocation - Berechnen Abstand zwischen zwei Punkten] [1] [1]: http://stackoverflow.com/questions/3905896/distancefromlocation-calculate-distance-between-two-points – webmastx

Antwort

31

Sie sollten ein Objekt von CLLocation erstellen verwenden,

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

Jetzt mit ihm können Sie Abstand finden.

+5

Mit dem Code CLLocationDistance distance = [aCLLocationA distanceFromLocation: aCLLocationB]; // Abstand ist ein Double, das die Entfernung in Metern darstellt (Quelle - http://Stackoverflow.com/a/10432069/1364174) –

+0

Es muss kein CLLocation erstellt werden, um die Entfernung zwischen den Punkten zu ermitteln. Schauen Sie bitte auf meine Antwort im unteren –

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

Aber ich denke, mehr wie folgt aus: Erweiterung CLLocationCoordinate2D { // In meteres func Abstand (#Um: CLLocationCoordinate2D) -> CLLocationDistance { let from = CLLocation (Breite: self.latitude, Länge: self.longitude) lET = CLLocation (Breite: to.latitude, Länge: to.longitude) return from.distanceFromLocation (to) } } – kwerle

23

Wenn es in Ordnung ist für Sie Abstand in Metern zwischen den Punkten zu bekommen, dann

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

den Abstand zwischen zwei Punkten zurück. No muss CLLocation von CLLocationCoordinate2D erstellt werden. Diese Definitionen sind seit iOS 4.0 verfügbar

+0

für mich funktioniert gut – VBaarathi

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

Einfache Version von Valleri's Antwort. Teile durch 1000, um KM zu erhalten, gefolgt von der Umwandlung in eine Zeichenfolge.

+0

nicht für eine schnelle 3 arbeiten. –

3

Swift4: oben Gedanken kombiniert

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) 
    } 
} 
Verwandte Themen