我试图找出错误但看起来所提到的方法只是返回了错误的值。我在模拟器中设置坐标,然后打印它们并计算距离:
(lldb) p location.coordinate
(CLLocationCoordinate2D) $1 = (latitude = 51, longitude = 0.10000000000000001)
(lldb) p _oldLocation.coordinate
(CLLocationCoordinate2D) $2 = (latitude = 51, longitude = 0)
现在我计算距离:
distance = (CGFloat)[location distanceFromLocation:_trackEndLocation];
当我打印出来时,我得到:
(lldb) po self.trackDistance
7019.76758
现在,问题是用户告诉我应用程序返回的距离太大。由于我想调试它,我已经检查了page to calculate distance between two points处的距离。
结果如下:
您可以注意到,根据网页的距离是6.997km而Apple的方法告诉我7.019km。我想知道谁是不正确的,Apple或网页以及如何解决这个问题。差异并不大,但是当你在几点之间积累时,这可能是令人不安的。
答案 0 :(得分:1)
distanceFromLocation的Apple文档页面说明了这一点:
此方法通过跟踪两个位置之间的曲线来测量两个位置之间的距离。得到的弧线是平滑的曲线,不考虑两个位置之间的特定高度变化。
我怀疑谷歌地图确实考虑了两点之间的地形,这就是为什么你看到你的测试有0.3%的差异。但是,我怀疑你的客户是否在抱怨这种程度的错误。错误更可能来自不同的原因。
在不了解您的算法的情况下,很难说,但如果您正在跟踪行进距离,则错误可能是由手机GPS坐标中的抖动引起的。 (这会导致直线路径看起来像锯齿形,这会产生更长的距离。)您可以从应用程序中记录一些真实数据以确定。
答案 1 :(得分:0)
问题是我正在检查准确性并在准确性差的情况下过滤掉一些结果。这就是为什么有时距离是错误的。我已经修复了精确度过滤,一切正常。