CLLocation 类 Swift

Posted

技术标签:

【中文标题】CLLocation 类 Swift【英文标题】:CLLocation Class Swift 【发布时间】:2018-03-29 22:05:21 【问题描述】:

我目前一直在尝试使用 Google 地图,并发现了 Apple 提供的 CoreLocation 可用的方法。

方法是:

func distance(from: CLLocation) 返回从接收器位置到指定位置的距离(以米为单位)。

现在最让我感兴趣的是,在将米转换为英里之后,这种方法是如何得出输出结果的。我将结果与谷歌地图计算出的距离进行了比较,发现它有很大的不同。我的问题是距离函数是否计算出直线距离而忽略转弯(即道路、高速公路等),这实际上会增加计算的距离。

这是我使用上述方法的实现。

 func testDistance(lat0: Double, long0: Double, lat1: Double, long1: Double)

        let coordinate₀ = CLLocation(latitude: lat0, longitude: long0)
        let coordinate₁ = CLLocation(latitude: lat1, longitude: long1)
        let distanceInMeters = coordinate₀.distance(from: coordinate₁)
        let distanceInMile = distanceInMeters/1609.344
        print("\(distanceInMile) miles")

    

【问题讨论】:

【参考方案1】:

CLLocation 的distance(from: CLLocation) 函数使用两个位置之间的直线进行计算(考虑到地球的曲率)。

https://developer.apple.com/documentation/corelocation/cllocation/1423689-distance

此方法通过追踪来测量两个位置之间的距离 它们之间的一条线,沿着地球的曲率。这 产生的圆弧是平滑曲线,不考虑 两个位置之间的特定高度变化。

【讨论】:

【参考方案2】:

点之间的距离有不同的、同样有效的定义。位置管理器计算“如乌鸦飞翔”或沿地球球面的距离。 (也称为“大圆”距离。)

然后是行驶距离。这说明了你必须走的路线,它总是比“直线”距离长(实际上是在地球表面的曲线上)。

【讨论】:

有道理!对不起,如果这个问题看起来很基本。

以上是关于CLLocation 类 Swift的主要内容,如果未能解决你的问题,请参考以下文章

CLLocation 如何实现 Equatable 协议?

如何使用 iPhone 的 CLLocation 类将纬度和经度分配给变量?

将 CLLocation 对象转换为 MKMapPoint 结构

在 Swift 中编码 CLLocation 数组会使编译器崩溃?

[CLLocation] 和 CLLocation 的区别

需要归档 CLLocation 数据