var startLoction: CLLocation!
var startLoction: CLLocation!
@IBAction func getCurrLocation(){
startLoction = currLocation
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
currLocation = locations.last!
if currLocation.horizontalAccuracy > 0{
var distance = CLLocationDistance(DBL_MAX)
if let location = self.startLoction {
distance = currLocation.distance(from: location)
realTimeDistanceLabel.text = String(format: "%.2f", distance)
}
}
}
问题: 1.当我保持静止时,距离有时会增加,可能会超过15米。它总是从一个大数字开始 当我走出10或20米然后径向向后走时,距离有时会增加但不会减少。 当我走动一个大圆圈时,距离相对更准确一些。
我还尝试添加currLocation.horizontalAccuracy > 0 && currLocation.horizontalAccuracy < 100
,并且从stackOverflow回答中尝试了prevLocation >= (currLocation.horizontalAccuracy * 0.5
,但仍然无法获得准确的值。
还有其他任何想法可以做到吗?
感谢。
答案 0 :(得分:0)
核心位置在使用时打开,花费一段时间对设备位置进行三角测量,以便需要一段时间才能安定下来。但是你也会发现它在某些地方/条件下会失去准确性,并会尽力提高准确性。然后,该设备将改变它对您所在位置&#34;如果它在您的方法之后执行此操作
@IBAction func getCurrLocation() { ... }
被调用,自然会看起来好像设备已经移动了。
为了减少这种情况的影响,您不仅可以测试currLocation.horizontalAccuracy&gt; 0(所以它是一个有效的读数)但它也小于一个给定的正值(虽然这会带来它自己的问题 - 见下文)。设备的当前水平位置可以在正或不确定半径之间,如水平精度属性所报告的那样(不确定半径总是正数。如果是负数,所有投注都是关闭的,设备本质上是说& #34;坚持下去,我无法确切地说出我的确切位置&#34;)。
实际上虽然为currLocation.horizontalAccuracy设置上限会显示问题,但它可能不会成为你想要的,因为你的UI只能在核心位置知道准确度大于x的情况下工作。通常,您不希望以这种方式限制UI。