CLLocationDistance,两个纬度和经度之间的英里和英尺给我iOS的错误值?

Posted

技术标签:

【中文标题】CLLocationDistance,两个纬度和经度之间的英里和英尺给我iOS的错误值?【英文标题】:CLLocationDistance, miles and feet between two latitude and longitude giving me the error value iOS? 【发布时间】:2013-10-29 14:54:36 【问题描述】:

我使用 CLLocationDistance 计算两个 lat 和 lng 之间的距离,我给第一个 lat 和 lng 提供了一些静态值,第二个 lat 和 lng 是我当前的位置,即使我到达确切位置,lat 之间的差异lng 是 20 英尺或 15 英尺。

我正在使用公式将 CLLocationDistance 输出转换为英尺

CLLocationDistance distance = [locA distanceFromLocation:locB];

float feet= distance  *3.28084;

如何获得两个 lat 和 lng 之间的准确距离?

【问题讨论】:

查看当前位置的 Horizo​​ntalAccuracy 属性。 15 英尺大约是 5 米,因此对于 GPS 数据来说这是一个相当不错的精度。 看来你做对了。我认为 15-20 英尺并没有那么大的差异。 @NikosM。感谢您的回复,无论如何,我的应用程序是一种基于导航的应用程序,所以我需要显示准确的值。 @Deepak GPS 需要一点时间来“预热”,因此请继续监控位置,直到horizontalAccuracy 降至可接受的水平。不要开始CLLocationManager 和/或获取第一个MKUserLocation 并期望得到准确的值。 【参考方案1】:

你的算法看起来是正确的。

如果您想知道为什么在纬度和经度看起来相同的两个位置之间没有收到“零”距离,那么在为静态定义的位置设置纬度和经度时,您可能没有考虑足够的有效数字。话虽如此,六位小数通常足以在一英尺之内。 (参见_Wikipedia:WikiProject 地理坐标中的Precision Guidelines。_)

虽然在实践中,它可能永远不会为零(并且肯定不会比您所在位置的 horizontalAccuracy 可靠地好),但如果您在静态定义的位置中指定了足够多的有效数字,则距离应该小于 15-20 英尺。

另外注意,如果你使用CLLocationManager方法startUpdatingLocation,你得到的初始位置总是不是最好的使用值,就像你指定desiredAccuracykCLLocationAccuracyBest一样,它通常需要一个给您的didUpdateLocations 打几个电话(通常精度会提高,即horizontalAccuracy 会降低)。因此,请继续监视didUpdateLocations 报告的位置,直到您在您认为可以接受的范围内获得horizontalAccuracy(但不要期望获得完美的准确性,因为这永远不会发生,并且受制于设备的物理环境)。

【讨论】:

感谢您的回复,我使用双精度值来保存 lat 和 lng ,我使用 15 位小数来找出它们之间的差异。仍然有很大的不同 @Deepak 那么问题来了,你之前保存的位置对象是什么,horizontalAccuracy 是什么。但是,如果您抓住了从 CLLocationManager 获得的第一个 CLLocation,那么我预计这些值会有很大差异。 我的水平精度是10。

以上是关于CLLocationDistance,两个纬度和经度之间的英里和英尺给我iOS的错误值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 beautifulsoup 从 html 页面中抓取纬度/经度数据

CLLocationDistance 转换

向 CLLocationDistance 添加一些计算

在 Swift 中强制转换 CLLocationDistance

从数据库中搜索附近的地方 [swift]

如何获取 Android GPS 位置