2012-06-18 10 views
26

Wiem z dokumentacji możemy znaleźć odległość między dwoma CLLocation punktów za pomocą funkcji, distanceFromLocation:. Ale moim problemem jest to, że nie mam typu danych CLLocation ze mną, mam punkty CLLocationCoordinate2D. Jak więc znaleźć odległość między dwoma punktami CLLocationCoordinate2D? Widziałem posta post, ale nie było dla mnie pomocne.Znajdowanie odległości między CLLocationCoordinate2D punktów

+0

Odległość obliczenia są rzeczywiście dość trudne. Powinieneś naprawdę rzucić okiem na CLLocation. –

+0

czy masz lat i długo, a następnie utworzyć cllocation, a następnie użyj CLLocationDistance metrów = [newLocation distanceFromLocation: oldLocation]; –

+0

zobacz poniżej: [distanceFromLocation - obliczanie odległości pomiędzy dwoma punktami] [1] [1]: http://stackoverflow.com/questions/3905896/distancefromlocation-calculate-distance-between-two-points – webmastx

Odpowiedz

31

Należy utworzyć obiekt CLLocation stosując

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

Teraz używając go można znaleźć dystans.

+5

Z kodem CLLocationDistance distance = [aCLLocationA distanceFromLocation: aCLLocationB]; // odległość jest dwukrotnie reprezentująca odległość w metrach (Źródło - http://stackoverflow.com/a/10432069/1364174) –

+0

Nie ma potrzeby tworzenia CLLocation dla uzyskania odległości między punktami. Proszę spojrzeć na moją odpowiedź na dolnym –

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

Ale myślę, że więcej tak: przedłużacza CLLocationCoordinate2D { // W meteres func odległość (# Aby: CLLocationCoordinate2D) -> CLLocationDistance { let spośród = CLLocation (szerokość: self.latitude, Długość: self.longitude) let do = CLLocation (szerokość, długość: to.latitude: to.longitude) powrót from.distanceFromLocation (to) } } – kwerle

23

Jeśli to jest ok, aby uzyskać odległość w metrach pomiędzy punktami, a następnie

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

powróci odległość między dwoma punktami. Nie ma potrzeby tworzenia CLLocation przez podaną CLLocationCoordinate2D. Te definicje są dostępne, ponieważ iOS 4.0

+0

działa dobrze dla mnie – VBaarathi

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

Prosta wersja odpowiedzi Valleriego. Podziel przez 1000, aby uzyskać KM, a następnie konwersję na ciąg.

+0

nie pracuje dla szybkiej 3. –

3

Swift4: połączeniu powyżej myśli

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) 
    } 
} 
Powiązane problemy