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



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

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))))")
}

谢谢!

您的代码很好,但您的测试是错误的。

你忽略了地球不是平面,所以你考虑的直角三角形位于大地水准面上,斜边大于平方边和。

我建议你手动进行几次测试,以确保结果看起来逼真,而不是深入研究曲面上的几何图形。


需要注意的是:如果这些点非常接近,您的测试可能会通过,因为在这种情况下,地球表面的曲率对计算的影响最小。

最新更新