从另一对经纬度坐标开始,计算特定距离处的经纬度坐标

3

我的应用程序需要能够获取用户的起始位置,然后计算距离该位置特定距离(在所有方向上)的纬度/经度坐标。有人知道我如何实现这一点吗?


你可以在 CLLocation 上使用 distanceFromLocation: 来实现此功能。 - rckoenes
返回距离,这个我已经有了。我需要获取函数被调用的实际位置(即“from”)。 - Anthony
4
问题不够清楚,您是否希望输出一个无限的位置集合? - Vik
1
尝试访问https://dev59.com/V2w15IYBdhLWcg3wZ68Y#6634982,https://dev59.com/hWw05IYBdhLWcg3wXQwh等网站。 - user467105
@Vik,更确切地说,我只能列举一些可以用学位来说明的。 - Anthony
2个回答

5

我在这个链接中找到了答案:移动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)
}

摩根·陈写道:

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


该方法中的所有数学计算都是以弧度为单位进行的。在方法开始时,lon1和lat1也被转换为弧度,以便于此目的。方位角也是以弧度为单位的。请记住,该方法考虑了地球的曲率,但对于较小的距离,您实际上不需要这样做。 - Morgan Chen

3

一组与中心点距离相等的点具有无限成员,因此不可能列出每一个点。但是,通过使用distanceFromLocation:方法,可以检查单个点是否在该集合内。

从数学上讲,给定一个半径坐标(经度,纬度),并假设地球是平的,则半径(距离)为r的圆的方程为

r^2 =(x-long)^2 +(y-lat)^2

借助一些魔法,这变成了

x = r cosθ - long; y = r sinθ - 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];
}

编辑:我不小心漏掉了几个术语


你的 locationForAngle: 方法完全没有使用给定的 center 参数,所以肯定有什么问题... - Martin R
我修好了。我不小心漏掉了几个术语。 - Morgan Chen
已接受,因为它本质上与我下面发布的内容相同,但更加深入。 - Anthony
这是一个不错的开始,但如果您传入南半球的坐标,则返回的坐标将被移至北半球。 这个答案更好:https://dev59.com/hWw05IYBdhLWcg3wXQwh#20241963 - Stewart Macdonald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接