2017-02-08 4 views
3

私はCLLocationManagerを使用してユーザーの場所を取得しています。CLLocationManagerから実際に不正確な精度を取得する

私は単一の場所の更新を取得したいと思います。

私の問題は、私はhorizontalAccuracy

場所は+/- 3881.91メートル

verticalAccuracy%@ < + xx.xxxxxx、+ yy.yyyyyyy>は本当に悪い取得していますということです:65.4401861912846、horizo​​ntalAccuracy :3881.90892434957

コード:

fileprivate lazy var locationManager: CLLocationManager = { 
    let manager = CLLocationManager() 
    manager.desiredAccuracy = kCLLocationAccuracyBest 
    manager.delegate = self 
    manager.requestAlwaysAuthorization() 
    manager.pausesLocationUpdatesAutomatically = false 
    manager.desiredAccuracy = kCLLocationAccuracyBest 
    manager.distanceFilter = kCLDistanceFilterNone 
    return manager 
}() 

override init() { 
    super.init() 
    locationManager.startUpdatingLocation() 
} 

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    guard let mostRecentLocation = locations.last else { 
     return 
    } 

    let verticalAccuracy = mostRecentLocation.verticalAccuracy 
    let horizontalAccuracy = mostRecentLocation.horizontalAccuracy 

    print("location is %@", mostRecentLocation) 
    print("verticalAccuracy: \(verticalAccuracy), horizontalAccuracy:\(horizontalAccuracy)") 
} 

これはなぜ起こっているのですか? 私は窓の隣の部屋にいるので、悪い精度を得るが、それほど悪くない。

おかげ


私はとんでもない結果を取得しています。

私は水平精度が15,000 mです。

私はドアを出ると素晴らしいですが、ドアはこれほど悪くはありません。

セルラ三角測量とWi-Fiを使用すると、より良い結果が得られるはずです。


20分後、私はドアで±50mの精度の良い結果を得始めました。

+0

?ウィンドウの近くは良い選択肢ではありません。 – Apurv

+0

@Apurv、どうしてですか?私は最高の結果を得ることを期待していないが、4kmの精度はばかげている。 – ilan

答えて

0

最初に位置の更新を開始すると、最初の数回の読みは非常に貧弱で、GPSが落ち着くにつれて精度が向上することがわかっています。

私が行うことは、最初にその場所のタイムスタンプが数秒以上経過しているかどうかを確認することです。そうであれば、私はそれを捨てる。 (最近のOSのバージョンでGPSの読み込みが古くなっても、システムがGPSの電源を入れた最後の時刻からの位置情報を提供していたかどうかはわからない)

場所を確認し、正確性をチェックし、正確な読み取り値が低すぎる場所の更新を破棄します。

GPSが30秒(またはそれ以上)かかることに留意してください。落ち着きがなく、GPS信号が不十分な地域では、十分な読みが得られないことがあります。

+0

私は場所を15分間実行したままで、依然として同じ悪い結果を得ています – ilan

+0

あなた。これを屋内でテストすることはできません。あなたはロギングを追加し、GPS信号をブロックしている高層ビルや樹木がない状態で空を開くために電話を外に出さなければなりません。 –

+0

私はその配偶者がドアをよりよく働かせることを知っていますが、結果は嘲笑です。 4 kmの正確さ。 ドアでは、携帯電話/無線LANを使用してより良い結果が得られるはずです。 – ilan

0

より正確な位置を使用していることを確認する条件を追加することをお勧めします。私の場合は、以下の例では希望の水平精度として20を使用します。

例:あなたがアプリをテストしている

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

     locationManager.stopUpdatingLocation() 

     if locations.last!.horizontalAccuracy < 20 { 
      //Only use location that enters here 
     } 
     else { 
      //If the accuracy is not met then start updating location again and if possible increase more the accuracy (use kCLLocationAccuracyBestForNavigation if you really need it). Make sure that you use the desired accuracy and filter properly to avoid draining battery. 
      locationManager.startUpdatingLocation() 
     } 
    } 
関連する問題