2017-09-11 8 views
0

2つの場所の間の距離を取得しようとしていますが、私は常に間違った値を取得します。2つの場所の間の距離を正確に測定しない

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メートルよりも大きな数であってもよい、増加します。ここでコードがありますそれは常に大きな数字で始まります。 2. 10mまたは20mを歩いてから直進して歩くと、時々距離は増加しますが減少しません。 3.私が大きな円の周りを歩くとき、距離は相対的に少し正確な値になります。

また、currLocation.horizontalAccuracy > 0 && currLocation.horizontalAccuracy < 100を追加しようとしました。また、prevLocation >= (currLocation.horizontalAccuracy * 0.5からstackOverflowの回答を試みましたが、まだ正確な値を取得できません。

それを正しくするための他のアイデアはありますか?

ありがとうございました。

+1

'manager.desiredAccuracy'は何に設定されていますか? –

+0

@DávidPásztor 'locationManager.distanceFilter = kCLDistanceFilterNone'と' locationManager.desiredAccuracy = kCLLocationAccuracyBest' – jdleung

答えて

0

コアの位置をオンにすると、デバイスの位置を三角測量して、落ち着くまでに時間がかかります。しかし、特定の場所や状況で正確さを失う可能性があることもわかりますし、常に精度を向上させるよう努めます。デバイスは、それは「あなたが置かれている場所」についての心の変化すると、それはあなたの方法

@IBAction func getCurrLocation() { ... } 

後にこれを実行した場合になりますが、デバイスが移動したかのように自然にそれが表示されます、と呼ばれています。

この問題の影響を軽減するには、currLocation.horizo​​ntalAccuracy> 0だけでなく、有効な値であることをテストすることができます。また、指定された正の値よりも小さいこともテストします(これにより、 - 下記参照)。デバイスの現在の水平位置は、horizo​​ntalAccuracyプロパティで報告されているように、不確かさの半径のプラスまたはマイナスの間にある場合があります(不確実性の半径は常に正の数です。私がどこにいるかはまだ確信しているとは言えません ")。

実際には、currLocation.horizo​​ntalAccuracyの上限を設定すると問題が示されますが、Core Locationが正確度がxより大きいという条件でUIが動作するため、おそらくあなたが望むものではありません。一般的に、このようにUIを制限することは望ましくありません。

+0

'startUpdatingLocation'は、アプリケーションが起動すると起動し、' getCurrLocation() 'を押す前に常に秒を待ちますが、不正確な値を取得して取得します最初は大きな数字です。また、 'currLocation.horizo​​ntalAccuracy> 0 && currLocation.horizo​​ntalAccuracy <60'を設定しました。まっすぐ歩いても距離はOKですが、出発点に戻ったときの距離は正確ではありません。距離は3メートル未満ですが、私には8メートル以上の距離があります。 – jdleung

+0

水平精度は3メートル未満です。たとえば水平と垂直は3メートル未満です。これは、おおむね、可能な分散の「半径」に相当します。したがって、分散は最大6メートルになる可能性があります。したがって、実際に2メートル移動すると8メートル移動しますデバイスが間違った値や予期しない値を報告していることが証明されていません。 – TheBasicMind

関連する問題