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 上没有依赖项。
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 椭球体,但可以指定不同的参数,例如 GRS 80 椭球体。
distance((lat: Double.pi / 2, lon: 0), (lat: -Double.pi / 2, lon: 0),
ellipsoid (a: 6378137.0, f: 1/298.257222100882711))
swift build
失败。 在 Linux 上使用 clang 没有问题。