我想使用最好的坐标。但有一件事令我困惑
这里我想检查一下,如果新的位置准确性更好,那么使用新位置,否则使用旧位置
if (newLocation.horizontalAccuracy>oldLocation.horizontalAccuracy)
{
self.bestEffortAtLocation=newLocation; // this mean new location is better accurate
}
else
{
self.bestEffortAtLocation=oldLocation; // this mean old location is better accurate
}
我想知道上面的检查是否正确?
我知道这是一个愚蠢的问题。但是现在我处于地面水平。
请建议
答案 0 :(得分:8)
这不是一个好主意。为了解原因,我们假设我们在时间t A(t)调用准确度,它将以米为单位给出。我们可以想象以下情况:
那是:
m
米。t
,您的准确度会更差n
米。m
之后超出t
半径的边界。使用您的算法,当您t
时,您将拒绝使用新的GPS位置,因为n
比m
更差,即使用户不可能旧址附近的任何地方。他们的速度超过了m
的半径。这显然不对。
相反,这是一个基本算法来决定新位置是旧位置还是更差:
每个t
秒的周期性间隔,存储一个3元组(L, v, A)
,其中包含用户的位置L,速度v和精度A.
在某个时间u
,您想知道对用户所在位置的最佳猜测是什么。
在u - t
时检查位置。如果A old > new (请记住,如果以米为单位测量精度值越高,则使用新位置,因为它更准确。
如果A old <一个 new ,事情有点不同。如果A/t
超过2v
,则用户可能仍在准确性圈内,因此请使用旧的L
。但如果没有,那么用户已超出准确度范围的范围,因此请使用新的L
。
答案 1 :(得分:0)
horizontalAccuracy
是该位置的不确定半径,即其值越大,您的位置就越不准确。所以你应该恢复你使用的比较
我还建议引入一些阈值,低于该阈值,任何新的位置都是好的。
答案 2 :(得分:0)
CLLocation.horizontalAccuracy定义为
horizontalAccuracy
不确定性的半径 位置,以米为单位。 (只读)
@property(只读, NS_NONATOMIC_IPHONEONLY) CLLocationAccuracy horizontalAccuracy
讨论
坐标的纬度和 经度确定了中心 圆圈,此值表示 那个圆的半径。否定的 value表示坐标 纬度和经度无效。
因此,根据该定义,“更好”的准确性是两者中较低的非负值。
答案 3 :(得分:0)
仅仅因为准确度下降,这是否真的意味着你想忽略阅读?例如,假设我正在驾驶我的汽车而且我在繁忙的市中心后面的几座高楼后面,如果你仍然比较已知的HDOP,那么你将在城外留下一个标记,直到我到达信号与原始信号相同或更强的另一端。
事实上,一旦你找到了最好的位置(在一个漂亮的开放场地,不动就可以说),那么HDOP会增加,你永远不会从旧位置更新......
答案 4 :(得分:0)
没有。最简单的解决方法是将旧准确度A(0)
增加可能的行进距离v*t
。然后检查是否A(0) + v*t) < A(t)
- 如果是,请使用旧位置而不是新位置。