2

我似乎在文档描述中看不到它,但是有人知道上述方法是否考虑了地球的椭球形状还是基于球形?

我认为确实如此,我只需要确定!

提前致谢。

4

2 回答 2

0

是的,似乎CLLocation.distance(from:)确实使用了某种椭球地球模型。

使用这个 Swift 代码

func testRadius(lat1: CLLocationDegrees, lon1: CLLocationDegrees, lat2: CLLocationDegrees, lon2: CLLocationDegrees, angularDistance: CLLocationDegrees) {
    let loc1 = CLLocation(latitude: lat1, longitude: lon1)
    let loc2 = CLLocation(latitude: lat2, longitude: lon2)
    
    let angularDistanceRadians = angularDistance * .pi / 180
    let meterDistance = loc2.distance(from: loc1)
    let earthRadius = meterDistance / angularDistanceRadians  // assumes circle!
    
    func coordAsString(_ loc: CLLocation) -> String {
        "(\(loc.coordinate.latitude), \(loc.coordinate.longitude))"
    }
    
    print(earthRadius, coordAsString(loc1), coordAsString(loc2))
}


// Meridians at longitudes 0°, 90°, 180° and -90°. Poles aren't well-behaved, thus ±89° instead of ±90°
testRadius(lat1: -89, lon1:   0, lat2:  89, lon2:   0, angularDistance: 178)
testRadius(lat1: -89, lon1:  90, lat2:  89, lon2:  90, angularDistance: 178)
testRadius(lat1: -89, lon1: 180, lat2:  89, lon2: 180, angularDistance: 178)
testRadius(lat1: -89, lon1: -90, lat2:  89, lon2: -90, angularDistance: 178)

// Equator from longitudes 0° to 180° and from 90° to -90°
testRadius(lat1:   0, lon1:   0, lat2:   0, lon2: 180, angularDistance: 180)
testRadius(lat1:   0, lon1:  90, lat2:   0, lon2: -90, angularDistance: 180)

你可以沿着一些经线和赤道测试地球的半径。这导致:

6367088.045696135 (-89.0, 0.0) (89.0, 0.0)
6367088.045696135 (-89.0, 90.0) (89.0, 90.0)
6367088.045696135 (-89.0, 180.0) (89.0, 180.0)
6367088.045696135 (-89.0, -90.0) (89.0, -90.0)
6378137.000000001 (0.0, 0.0) (0.0, 180.0)
6378137.000000001 (0.0, 90.0) (0.0, -90.0)

所以赤道半径为 6,378,137 m,并且——因为我们在这里使用 pi 和弧度而不是椭圆偏心率(我们不知道)特定的“周长因子”—— “平均纵向”半径约为 6,367,088 m

这些与 GPS 中常用的参考椭球WGS-84 相CoreLocation匹配,这与用于访问 iPhone 的 GPS 数据的 API一样有意义。

于 2020-11-26T23:45:22.350 回答
-2

你读过参考书吗?

这种方法通过追踪它们之间的一条遵循地球曲率的线来测量两个位置之间的距离。生成的弧线是一条平滑曲线,没有考虑两个位置之间的特定高度变化。

于 2012-09-14T15:28:00.830 回答