vincenty 1.1.2

vincenty 1.1.2

Daniel Strobusch维护。



vincenty 1.1.2

  • 作者
  • Daniel Strobusch

vincenty

Swift Version Platform Build

Swift中逆大地测量问题求解器。

为了计算椭圆体(通常是扁球体)上两点之间的距离,必须解决逆大地测量问题。此处不考虑将椭球体(不是扁球体)进行推广,因此将使用“椭球体”一词与扁球体同义。

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

以下是一个计算WGS 84椭球体上两点之间距离(在这种情况下是两极)的示例。

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

为了计算方位角(也称为起始和终点方位角)

let (d, (a, b)) = try solveInverse((lat: Double.pi / 2,lon: 0), (lat: -Double.pi / 2, lon: 0))

其中(a, b)是方位角。

目录

安装

依赖项

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

Swift 包管理器

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

Cocoa Pods

确保在 Podfile 中设置了有效的部署目标,并添加

pod 'vincenty', '~> 1'

实现细节

这是 Vincenty 公式的简单实现。这并不是最准确或最稳定的算法,但很容易实现。还有更复杂的实现,例如,参见geodesic

收敛和容差

收敛和结果的精度可以通过两个参数进行控制。

try distance((lat: 0,lon: 0), (lat: 0, lon: 0), tol: 1e-10, maxIter: 200)

WGS 84 和其他椭球体

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

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