gpt4 book ai didi

ios - 在 Swift 中计算两个 CLLocation 点之间的方位

转载 作者:行者123 更新时间:2023-11-30 13:22:01 25 4
gpt4 key购买 nike

我正在尝试在仅 swift 代码中计算两个 CLLocation 点之间的方位。我遇到了一些困难,并假设这是一个非常简单的函数。堆栈溢出似乎没有列出任何内容。

func d2r(degrees : Double) -> Double {
return degrees * M_PI / 180.0
}

func RadiansToDegrees(radians : Double) -> Double {
return radians * 180.0 / M_PI
}


func getBearing(fromLoc : CLLocation, toLoc : CLLocation) {

let fLat = d2r(fromLoc.coordinate.latitude)
let fLng = d2r(fromLoc.coordinate.longitude)
let tLat = d2r(toLoc.coordinate.latitude)
let tLng = d2r(toLoc.coordinate.longitude)

var a = CGFloat(sin(fLng-tLng)*cos(tLat));
var b = CGFloat(cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(fLng-tLng))

return atan2(a,b)
}

我的 atan2 调用遇到有关左值 cgfloat 或其他内容的错误...

最佳答案

这是一个 Objective-C 解决方案

可以很容易地翻译成 Swift:

func degreesToRadians(degrees: Double) -> Double { return degrees * .pi / 180.0 }
func radiansToDegrees(radians: Double) -> Double { return radians * 180.0 / .pi }

func getBearingBetweenTwoPoints1(point1 : CLLocation, point2 : CLLocation) -> Double {

let lat1 = degreesToRadians(degrees: point1.coordinate.latitude)
let lon1 = degreesToRadians(degrees: point1.coordinate.longitude)

let lat2 = degreesToRadians(degrees: point2.coordinate.latitude)
let lon2 = degreesToRadians(degrees: point2.coordinate.longitude)

let dLon = lon2 - lon1

let y = sin(dLon) * cos(lat2)
let x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon)
let radiansBearing = atan2(y, x)

return radiansToDegrees(radians: radiansBearing)
}

结果类型为Double,因为所有位置坐标都是这样的存储(CLLocationDegreesDouble 的类型别名)。

关于ios - 在 Swift 中计算两个 CLLocation 点之间的方位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37676431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com