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

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

距离中心点固定距离的点集具有无限成员,因此不可能列出每个点。 但是,给定单个点,您可以使用distanceFromLocation:方法检查它是否在集合中。

在数学上,给定半径坐标(长,纬度)并假设地球是平坦的,具有半径(距离)r的圆的等式将是

r ^ 2 =(x – 长)^ 2 +(y – lat)^ 2

随着一些魔法的使用,这变成了

x =rcosθ – long; y =rsinθ – lat

因此,现在您可以以任意角度打孔,并且对于已知距离/半径,可以在圆的边缘上获得一个点。 在地图方面,角度0将为您提供中心正东方圆上的点。 正角度围绕中心逆时针转动。

在代码中:

 -(CLLocation*)locationForAngle:(float)angle fromCenterLocation:(CLLocation *)center withDistance:(float)distance { //angle must be in radians float longitude = distance * cosf(angle) - center.coordinate.longitude; float latitude = distance * sinf(angle) - center.coordinate.latitude; return [[CLLocation alloc] initWithLatitude:latitude longitude:longitude]; } 

编辑:我不小心丢掉了几个条款

我在这个链接上找到了我的答案。 将一个CLLocation移动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) } 

Morgan Chen写道:

此方法中的所有数学运算都以弧度完成。 在方法开始时,为此也将lon1和lat1转换为弧度。 轴承也是弧度。 请记住,这种方法考虑了地球的曲率,你不需要做很小的距离。