iOS 如何通过两个位置显示正确的角度目标?

iOS How to show in correct angle destination by two location?

最近几天我努力通过两个定位点使其成为正确的方向角。

我没能把它做好。

这是从腓立比人到新西兰的例子

extension FloatingPoint {

    var degreesToRadians: Self { return self * .pi / 180 }
    var radiansToDegrees: Self { return self * 180 / .pi }
}

func heading(from :CLLocationCoordinate2D ,to: CLLocationCoordinate2D) -> Double {
    let lat1 = from.latitude.degreesToRadians
    let lon1 = from.longitude.degreesToRadians

    let lat2 = to.latitude.degreesToRadians
    let lon2 = to.longitude.degreesToRadians

    let dLon = lon2 - lon1
    let y = sin(dLon) * cos(lat2)
    let x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon)

    let headingDegrees = atan2(y, x).radiansToDegrees
    if headingDegrees >= 0 {
        return headingDegrees
    } else {
        return headingDegrees + 360
    }
}

这里在 swiftUI 代码中用经纬度调用:

Image(systemName: "arrow.left.circle.fill")
 .font(.system(size: 25))
 .frame(width: 30, height: 30, alignment: .center)
 .rotationEffect(.degrees(heading(from:  CLLocationCoordinate2D(latitude: 14.599512, longitude: 120.984222),to: CLLocationCoordinate2D(latitude: -36.848461, longitude: 174.763336))))

她是我的输出

按我看来正确的方向是相反的:

我相信你的公式适用于两个坐标点之间的方位角。该公式的结果是来自磁北的 degrees/radians。因此,当我们将其转换为 Core Animation 时,零度 bearing-wise 现在在 Core Animation 中实际上是 -90/270 度,所以我相信如果您从计算中减去 90 度或 pi/2 弧度,您应该会看到箭头指向正确的方向。

您可以在“添加圆弧”部分找到有用的图形。 https://developer.apple.com/library/archive/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/BezierPaths/BezierPaths.html