计算距另一对纬度/经度坐标特定距离的纬度/经度坐标

Ant*_*ony 3 xcode objective-c latitude-longitude ios swift

我的应用程序需要能够获取用户的起始位置,然后计算距该点(在所有方向)特定距离的纬度/经度坐标。有谁知道我怎么可能做到这一点?

Ant*_*ony 5

我在这个链接上找到了我的答案Move a CLLocation by x 米并将其移植到 Swift 中。

func locationWithBearing(bearing:Double, distanceMeters:Double, origin:CLLocationCoordinate2D) -> CLLocationCoordinate2D {
    let distRadians = distanceMeters / (6372797.6) // earth radius in meters

    let lat1 = origin.latitude * M_PI / 180
    let lon1 = origin.longitude * M_PI / 180

    let lat2 = asin(sin(lat1) * cos(distRadians) + cos(lat1) * sin(distRadians) * cos(bearing))
    let lon2 = lon1 + atan2(sin(bearing) * sin(distRadians) * cos(lat1), cos(distRadians) - sin(lat1) * sin(lat2))

    return CLLocationCoordinate2D(latitude: lat2 * 180 / M_PI, longitude: lon2 * 180 / M_PI)
}
Run Code Online (Sandbox Code Playgroud)

摩根陈写道:

此方法中的所有数学运算均以弧度计算。在该方法开始时,出于此目的,lon1 和 lat1 也被转换为弧度。轴承也是弧度。请记住,此方法考虑了地球的曲率,对于小距离,您实际上不需要这样做。