web-dev-qa-db-ja.com

CLLocationCoordinate2Dポイント間の距離を見つける

ドキュメントから、関数distanceFromLocation:を使用して2つのCLLocationポイント間の距離を見つけることができることを知っています。しかし、私の問題は、CLLocationデータ型を持っていないことです。CLLocationCoordinate2Dポイントがあります。では、2つのCLLocationCoordinate2Dポイント間の距離をどのようにして見つけることができますか。投稿 post は見ましたが、役に立ちません。

35
rakeshNS

CLLocationのオブジェクトを作成するには、

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

次に、次を使用して距離を計算できるはずです

[location1 distanceFromLocation:location2];
35
Apurv

ポイント間の距離をメートル単位で取得してもよい場合は、

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

2点間の距離を返します。 CLLocationCoordinate2Dを指定してCLLocationを作成する必要はありません。これはiOS 4.0以降で使用できます

31
Valerii Lider

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)
    }
}
27
Aviel Gross

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)
    }
}
19
Eric Yuan
    let point1 = MKMapPointForCoordinate(myLocation)
    let point2 = MKMapPointForCoordinate(friendLocation)
    let distance = MKMetersBetweenMapPoints(point1, point2)/1000
    let distanceStr = NSString(format: "%.3f", distance)

ヴァレリの答えのシンプルなバージョン。 1000で除算してKMを取得し、続いて文字列に変換します。

5
VBaarathi