测量两个位置之间的距离不准确

时间:2017-09-11 13:08:28

标签: ios swift gps location

我试图获得两个位置之间的距离,但我总是得到错误的价值。以下是代码:

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,但仍然无法获得准确的值。

还有其他任何想法可以做到吗?

感谢。

1 个答案:

答案 0 :(得分:0)

核心位置在使用时打开,花费一段时间对设备位置进行三角测量,以便需要一段时间才能安定下来。但是你也会发现它在某些地方/条件下会失去准确性,并会尽力提高准确性。然后,该设备将改变它对您所在位置&#34;如果它在您的方法之后执行此操作

@IBAction func getCurrLocation() { ... }

被调用,自然会看起来好像设备已经移动了。

为了减少这种情况的影响,您不仅可以测试currLocation.horizo​​ntalAccuracy&gt; 0(所以它是一个有效的读数)但它也小于一个给定的正值(虽然这会带来它自己的问题 - 见下文)。设备的当前水平位置可以在正或不确定半径之间,如水平精度属性所报告的那样(不确定半径总是正数。如果是负数,所有投注都是关闭的,设备本质上是说& #34;坚持下去,我无法确切地说出我的确切位置&#34;)。

实际上虽然为currLocation.horizo​​ntalAccuracy设置上限会显示问题,但它可能不会成为你想要的,因为你的UI只能在核心位置知道准确度大于x的情况下工作。通常,您不希望以这种方式限制UI。