ios - 获取iOS中两个坐标之间距离的垂直和水平分量

标签 ios swift math cllocation

我正在尝试在 swift 中创建一个函数,准确计算任何位置距地球原点的垂直和水平距离(纬度:0,经度:0)。我知道 iOS 有 distanceFromLocation 函数,但这给了我直接的位置。我正在寻找的是该方向的水平和垂直分量。我尝试提出自己的解决方案,但是当我根据得到的水平和垂直分量测试直接距离时,它与实际距离不匹配。这是我的功能:

func distanceFromOrigin(location:CLLocation) {

    let lat = location.coordinate.latitude
    let lon = location.coordinate.longitude

    let earthOriginLocation = CLLocation(coordinate: CLLocationCoordinate2DMake(0.0, 0.0), altitude: CLLocationDistance(0.0), horizontalAccuracy: kCLLocationAccuracyBestForNavigation, verticalAccuracy: kCLLocationAccuracyBestForNavigation, timestamp: NSDate())

    var horDistance = earthOriginLocation.distanceFromLocation(CLLocation(latitude: 0.0, longitude: location.coordinate.longitude))
    var verDistance = earthOriginLocation.distanceFromLocation(CLLocation(latitude: location.coordinate.latitude, longitude: 0.0))

    let overallDistance = earthOriginLocation.distanceFromLocation(location)

    if lat < 0 {
        print("Object is South of Equator")
        verDistance *= -1
    } else if lat > 0 {
        print("Object is North of Equator")
    } else {
        print("Object is at the Equator")
    }
    if lon < 0 {
        print("Object is West of Prime Meridian")
        horDistance *= -1
    } else if lon > 0 {
        print("Object is East of Prime Meridian")
    } else {
        print("Object is at the Prime Meridian")
    }

    print("Vertical Distance: \(verDistance)")
    print("Horizontal Distance: \(horDistance)")
    print("Overall Distance: \(overallDistance)")

    //Test to see if vertical and horizontal distances are accurate compared to actual distance.
    print("Test: \(sqrt((pow(horDistance, 2.0)) + (pow(verDistance, 2.0))))")

}

谢谢!

最佳答案

你的代码没问题,但你的测试是错误的。

您错过了地球不是平坦,因此您正在考虑的直角三角形位于大地水准面上,并且斜边大于平方边和。

我建议您手动执行一些测试,以确保结果看起来真实,而不是深入研究曲面上的几何图形。


小提示:如果这些点彼此非常接近,您的测试可能通过,因为在这种情况下,地球表面的曲率对计算的影响很小。

关于ios - 获取iOS中两个坐标之间距离的垂直和水平分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37290091/

相关文章:

ios - NSUserDefaults使用NSInteger注册默认值

VB.Net-评估字符串中的数学表达式

css - 在使用 CSS 变换倾斜后应用于位置 div 的边距

Javascript 图像调整大小计算

swift - 使用背景颜色在 UITableViewCell 上设置长按动画

swift - 如何在 Swift 中表达约束泛型函数的类型?

iphone - 如何从十六进制 NSString 获取十进制整数

ios - Xcodebuild 不生成具有 x86_64 架构的动态框架

ios - 如何重置iOS模拟器?

ios - 重复事件 Facebook Analytics iOS SDK