2

現在、ユーザーが歩いた/走った/などの距離を測定しています。自分の結果を他のアプリの結果と比較すると、結果は他のアプリほど正確ではありません (つまり、100m は正しく、私の結果は約 50m です)。では、精度を上げてより正確な結果を得るにはどうすればよいでしょうか?

私がこれまでに行っていることは次のとおりです。

CLLocationManager を初期化します。

locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.delegate = self;
locationManager.distanceFilter = 10;

と:

- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *lastLocation = [locations lastObject];

    NSTimeInterval age = -[lastLocation.timestamp timeIntervalSinceNow];

    if (age > 30.0) return;

    if (lastLocation.horizontalAccuracy < 0) return; // ignore invalid updates

    if (previousLocation == nil || previousLocation.horizontalAccuracy < 0)
    {
        previousLocation = lastLocation;
        return;
    }

    CLLocationDistance distance = [lastLocation distanceFromLocation:previousLocation];

    if ([delegate respondsToSelector:@selector(currentDistance:)])
    {
        [delegate currentDistance:distance];
    }

    previousLocation = lastLocation;  

}

乾杯!

4

1 に答える 1

3

通常、位置情報は、設定とデバイスのハードウェアに応じて 3 つの方法で作成されます。

  • 携帯無線
  • Wi-Fi マッピング
  • GPS

-desiredAccuracyプロパティは、これら 3 つのモードのどれをオンにするかを設定します。一方、最新の応答に必要な最も正確な精度は次のとおりです。最初に無線を取得します (セル デバイスのみ)。WiFI がオンでセル データがオンの場合は、通常は +-100m 前後で、GPS (利用可能な場合) よりもかなり離れた場所にある WiFi ジオロケーションを取得します。GPS の遅延は、衛星の 2 つの検索とバッテリーの最適化によるものです。kCLLocationAccuracyBestForNavigationランニングでは、GPS が作動するとすぐに +-10m 近くの値が得られる必要があるため、希望の精度を使用することをお勧めします。
CoreLocation -distanceFilterManager がデルタ >= 5 メートルの新しい測定値を取得すると、デリゲート メソッドが呼び出されます。
水平精度が値よりも大きい場所を除外する場合は、別の論理条件を追加するだけです。
これらの回答リンクも読むことをお勧めします

于 2013-06-22T14:35:56.077 に答える