2012-06-18 9 views
26

Tôi biết từ tài liệu, chúng tôi có thể tìm khoảng cách giữa hai CLLocation điểm sử dụng hàm, distanceFromLocation:. Nhưng vấn đề của tôi là tôi không có loại dữ liệu CLLocation với tôi, tôi có các điểm CLLocationCoordinate2D. Vậy làm thế nào tôi có thể tìm khoảng cách giữa hai điểm CLLocationCoordinate2D. Tôi đã xem bài đăng post nhưng không hữu ích cho tôi.Tìm khoảng cách giữa CLLocationCoordinate2D điểm

+0

tính cách thực sự khá phức tạp. Bạn thực sự nên có một cái nhìn thứ hai tại CLLocation. –

+0

do u có lat và lâu sau đó tạo cllocation và sau đó sử dụng CLLocationDistance mét = [newLocation distanceFromLocation: oldLocation]; –

+0

Kiểm tra này: [distanceFromLocation - Tính toán khoảng cách giữa hai điểm] [1] [1]: http://stackoverflow.com/questions/3905896/distancefromlocation-calculate-distance-between-two-points – webmastx

Trả lời

31

Bạn nên tạo một đối tượng của CLLocation sử dụng,

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

Bây giờ sử dụng nó, bạn có thể tìm thấy khoảng cách.

+5

Với mã CLLocationDistance distance = [aCLLocationA distanceFromLocation: aCLLocationB]; // khoảng cách là một đôi đại diện cho khoảng cách tính bằng mét (Nguồn - http://stackoverflow.com/a/10432069/1364174) –

+0

Không cần phải tạo CLLocation để nhận khoảng cách giữa các điểm. Hãy nhìn vào câu trả lời của tôi ở cuối –

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

Nhưng tôi suy nghĩ nhiều hơn như thế này: mở rộng CLLocationCoordinate2D {// Trong meteres func khoảng cách (#to: CLLocationCoordinate2D) -> CLLocationDistance { let từ = CLLocation (vĩ độ: self.latitude, kinh độ: self.longitude) let to = CLLocation (vĩ độ: to.latitude, longitude: to.longitude) return from.distanceFromLocation (to) } } – kwerle

23

Nếu nó là ok cho bạn để có được khoảng cách tính bằng mét giữa các điểm, sau đó

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

sẽ trở lại khoảng cách giữa hai điểm. Không cần tạo CLLocation bằng cách cho trước CLLocationCoordinate2D. Định nghĩa này có sẵn từ iOS 4.0

+0

Hoạt động tốt cho tôi – VBaarathi

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

Phiên bản đơn giản của câu trả lời của Valleri. Chia cho 1000 để nhận KM sau đó chuyển đổi thành chuỗi.

+0

không hoạt động cho nhanh 3. –

3

Swift4: kết hợp trên những suy nghĩ

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