2012-06-18 13 views
26

के बीच दूरी ढूँढना मुझे दस्तावेज़ से पता है हम फ़ंक्शन, distanceFromLocation: का उपयोग कर दो CLLocation अंक के बीच दूरी पा सकते हैं। लेकिन मेरी समस्या यह है कि मेरे पास सीएलएलोकेशन डेटा प्रकार नहीं है, मेरे पास CLLocationCoordinate2D अंक हैं। तो मैं दो CLLocationCoordinate2D अंक के बीच दूरी कैसे प्राप्त कर सकता हूं। मैंने post पोस्ट देखा है लेकिन मेरे लिए सहायक नहीं है।CLLocationCoordinate2D अंक

+0

दूरी गणना वास्तव में काफी मुश्किल है। सीएलएलोकेशन पर आपको वास्तव में दूसरा नजर रखना चाहिए। –

+0

क्या आपके पास लेट और लम्बा समय है और फिर क्ल्लोकेशन बनाएं और फिर CLLocationDistance मीटर = [newLocation distanceFromLocation: oldLocation] का उपयोग करें; –

+0

चेक इस [distanceFromLocation - दो अंक के बीच दूरी की गणना] [1] [1]: http://stackoverflow.com/questions/3905896/distancefromlocation-calculate-distance-between-two-points – webmastx

उत्तर

31

आप का उपयोग CLLocation की एक वस्तु बनाने चाहिए,

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

अब यह उपयोग कर, आप दूरी पा सकते हैं।

+5

कोड CLLocationDistance दूरी = [एसीएलोकोकेशन दूरी से स्थान: लोकेशन: एसीएलएलोकेशनबी]; // दूरी मीटर में दूरी का प्रतिनिधित्व करने वाला एक डबल है (स्रोत - http://stackoverflow.com/a/10432069/1364174) –

+0

अंक के बीच दूरी प्राप्त करने के लिए CLLocation बनाने की आवश्यकता नहीं है। कृपया नीचे –

14

स्विफ्ट 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

पर मेरा उत्तर को देखो लेकिन मैं और अधिक इस तरह लगता है: विस्तार CLLocationCoordinate2D { // meteres में समारोह दूरी (#to: CLLocationCoordinate2D) -> CLLocationDistance { से = CLLocation (अक्षांश करते हैं: self.latitude, देशांतर: self.longitude) = CLLocation (अक्षांश के लिए करते हैं: to.latitude, देशांतर: to.longitude) (करने के लिए) } वापसी from.distanceFromLocation} – kwerle

23

अगर यह ठीक है आप अंक के बीच मीटर में दूरी प्राप्त करने के लिए, तो

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

दो अंक के बीच की दूरी के लिए वापस आ जाएगी। CLLocationCoordinate2D दिए गए CLLocation को बनाने की आवश्यकता नहीं है। यह परिभाषा आईओएस 4.0

+0

मेरे लिए अच्छी तरह से काम करता है – VBaarathi

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

वल्लेरी के उत्तर का सरल संस्करण उपलब्ध है। केएम प्राप्त करने के लिए स्ट्रिंग में रूपांतरण के बाद 1000 से विभाजित करें।

+0

तेज 3 के लिए काम नहीं कर रहा। –

3

Swift4: विचारों से ऊपर संयुक्त

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