测地线

Swift Version Platform Build GeographicLib Version

Swift 中用于解决逆测地线问题的求解器。

必须求解逆测地线问题才能计算扁球体或椭球体上两点之间的距离。 这里不再进一步考虑推广到非扁球体的椭球体,因此术语“椭球体”将与“扁球体”同义使用。

两点之间的距离也称为 Vincenty 距离

这是一个计算 WGS 84 椭球体上两点(在本例中为两极)之间距离的示例。

import geodesic
let d = distance((lat: Double.pi / 2,lon: 0), (lat: -Double.pi / 2, lon: 0))

就是这样。

目录

安装

至少需要 clang-3.6。 在 Linux 上可能需要显式安装它。 macOS 上没有依赖项。

Swift Package Manager

let package = Package(
    dependencies: [
        .package(url: "https://github.com/dastrobu/geodesic.git", from: "1.4.0"),
    ]
)

实现细节

此 Swift 包是 GeographicLib 中测地线例程的 C 实现的包装器。 这个 Swift 包的目标是使 GeographicLib 中的一些算法可用于 Swift 世界。 另外,可以使用 vincenty 包,它是一个更简单的逆测地线问题求解器,完全用 Swift 编写。 然而,Vincenty 的公式在极少数情况下存在一些收敛问题,并且可能无法提供与 Karney 算法相同的精度。

收敛性和容差

计算总是收敛的,据说可以计算到机器精度。 有关详细信息,请参阅 GeographicLib 的文档。

WGS 84 和其他椭球体

默认情况下,采用 WGS 84 椭球体,但可以指定不同的参数,例如 GRS 80 椭球体

distance((lat: Double.pi / 2, lon: 0), (lat: -Double.pi / 2, lon: 0), 
         ellipsoid (a: 6378137.0, f: 1/298.257222100882711))

已知问题