0

CLLocationManager を使用すると、おかしな測定値が表示されます。報告された緯度/経度は正確ですが、移動距離はかなりずれています。次のデリゲート メソッドを実装しました。

.h:
    CLLocationManager *mLocationManager;
    CLLocation *mStartDistance;

.m:
    - (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation
    fromLocation:(CLLocation *)oldLocation
    {
        NSLog(@"%g", newLocation.coordinate.latitude);
        NSLog(@"%g", newLocation.coordinate.longitude);
        NSLog(@"%g", newLocation.altitude);
        NSLog(@"%g", newLocation.verticalAccuracy);

    if (mStartDistance == nil)
    { mStartDistance = newLocation; }

    CLLocationDistance dist = [newLocation getDistanceFrom:mStartDistance];
    NSLog(@"%gm", dist);
}

そして、これを自分のデバイスで実行すると、次のようになります(有罪のヘッを保護するために緯度/経度がマスクされています):

] xx.xxxx
] -yy.yyyy
] 0
] -1
] 0m

] xx.xxxx
] -yy.yyyy
] 0
] -1
] 0m

] xx.xxxx
] -yy.yyyy
] 0
] -1
] 376.133m <-- wat?

+376m移動したと言っている理由がわかりません..それは+1200フィートです!

4

1 に答える 1

2

もログに記録するnewLocation.horizontalAccuracyと、最初の 2 つの更新で 400m を超えていることがわかるでしょう。それは GPS を使用していません (あなたは中にいて、高度の垂直精度に対して -1 を与えています)、そして携帯電話の三角測量は最初はかなり悪いかもしれません. 時々、私の最初の位置が 10 マイルの精度しかない場合がありますが、それでも最善の推測が示されます。より良いロックが得られると、そのポイントはかなり速く移動できます。

CoreLocation を使用する際の注意点の 1 つは、更新を受け入れるか拒否するかについて独自のヒューリスティックを決定することです。考慮すべき点として、水平方向の精度、更新に費やされた時間、および受信した以前の更新の数があります。以前、このサイトでかなりの数のスキームが議論されているのを見てきました。

于 2010-02-03T03:43:33.617 に答える