Je sais qu'à partir de la documentation, nous pouvons trouver la distance entre deux CLLocation
points en utilisant la fonction, distanceFromLocation:
. Mais mon problème est que je n'ai pas le type de données CLLocation avec moi, j'ai les points CLLocationCoordinate2D. Alors, comment puis-je trouver la distance entre deux points CLLocationCoordinate2D. J'ai vu le post post mais pas utile pour moi.
Vous devez créer un objet de CLLocation en utilisant,
- (id)initWithLatitude:(CLLocationDegrees)latitude
longitude:(CLLocationDegrees)longitude;
Ensuite, vous devriez pouvoir calculer la distance en utilisant
[location1 distanceFromLocation:location2];
Si vous pouvez obtenir la distance en mètres entre les points, alors
CLLocationCoordinate2D coordinate1 = <some value>
CLLocationCoordinate2D coordinate2 = <some value>
…
MKMapPoint point1 = MKMapPointForCoordinate(coordinate1);
MKMapPoint point2 = MKMapPointForCoordinate(coordinate2);
CLLocationDistance distance = MKMetersBetweenMapPoints(point1, point2);
retournera la distance entre deux points. Pas besoin de créer CLLocation
en fonction de CLLocationCoordinate2D
. Ces définitions sont disponibles depuis iOS 4.0
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)
}
}
Swift4: pensées combinées ci-dessus
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)
}
}
let point1 = MKMapPointForCoordinate(myLocation)
let point2 = MKMapPointForCoordinate(friendLocation)
let distance = MKMetersBetweenMapPoints(point1, point2)/1000
let distanceStr = NSString(format: "%.3f", distance)
Version simple de la réponse de Valleri. Divisez par 1000 pour obtenir KM suivi d'une conversion en chaîne.