获取 MKCircle 半径上的点坐标

Get point coordinate on a MKCircle radius

我在另一个主题中找到了问题的答案,并根据需要更改了功能。但是我没有达到预期的效果。 我用这个函数,我想得到半径上的点。

   func radiusSearchPoint(coordinate: CLLocationCoordinate2D, radius: CLLocationDistance) -> CLLocationCoordinate2D {

    let earthRadius = 6_378_100.0
    let π = Double.pi
    let lat = coordinate.latitude * π / 180.0
    let lng = coordinate.longitude * π / 180.0

    let t: Double = 0

    let pointLat = lat + (radius / Double(earthRadius)) * sin(t)
    let pointLng = lng + (radius / Double(earthRadius)) * cos(t)
    let point = CLLocationCoordinate2D(latitude: pointLat * 180 / π, longitude: pointLng * 180 / π)

    return point
}

Red line consists of two points: center of circle and the point that was received after the function was executed, but second point should be on the circle

如何在圆的半径上正确得到这个点?

欢迎使用 Whosebug。检查你的函数值,在我看来红线应该在圆圈内结束(而不是在圆圈上)。

你遇到的问题是你用来计算经度角的半径随纬度的变化而变化。当你增加纬度的角度时,你定义的恒定纬度的圆圈越来越小。纬度圆的半径是 R * cos(lat)。其中R为地球半径。将 pointLng 更改为:

let pointLng = lng + (radius / Double(earthRadius * cos(lat))) * cos(t)

还值得一提的是,地球不是球体,因此您在计算时会出错,在两极附近会变得更糟。要准确地执行此操作,您需要转换为 ECEF 坐标以获得准确的半径值,然后再次转换为 WGS84(纬度、经度)。