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
最近几天我努力通过两个定位点使其成为正确的方向角。
我没能把它做好。
这是从腓立比人到新西兰的例子
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