3

CLLocationManager をいじり始めており、以下のコールバック メソッドを使用しようとしています。iPhone でテストするために外に出ましたが、最初の数回の更新で、どこにも移動していないのに突然距離が 39 メートルになるなど、意味不明な値が得られたようです。または、5 メートルから始まり、20 メートルにジャンプすることもあります。私は外に出て歩きましたが、最初のスタート地点からの更新は「OK」のように見えました。その後、歩いて戻ると、元の 39 メートルのスタート地点に戻りました。以下で行っていることが正しいかどうか疑問に思っていました。CLLocationManager オブジェクトを初期化する viewDidLoad メソッドも含めました。

最初の値が正確であることを確認する方法はありますか? 前もって感謝します。

- (void)viewDidLoad
{
    [super viewDidLoad];
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    if (startingPoint == nil) {
        NSLog(@"NIL starting point");
        self.startingPoint = newLocation;
    }

    CLLocationDistance distance = [newLocation distanceFromLocation:startingPoint];
    NSString *distanceString = [[NSString alloc] initWithFormat:@"%g m", distance];
    distanceLabel.text = distanceString;
    [distanceString release];

    numberOfUpdates++;
    NSString *countString = [[NSString alloc] initWithFormat:@"%d", numberOfUpdates];
    countLabel.text = countString;
    [countString release];
}
4

3 に答える 3

5

GPS は不完全な技術です。大気条件、衛星の利用可能性 (および位置)、空の可視性、近くのオブジェクト (建物) から跳ね返る信号はすべて、固有の不正確さに寄与します。「正確さ」の値 (通常はかなり良い値) もありますが、これでも完全に信頼できるわけではありません。

飛行機は正確なアプローチに GPS を使用することは許可されていません。受信機の精度が十分ではなく、他の技術が必要です (独自の問題があります)。

標準の「マップ」アプリケーションを実行して、比較として使用してみてください。あなたのコードは良いと思います - それはただの GPS です。

もちろん、私がこれを言っているのは、私が独自の海上ナビゲーション アプリケーションに取り組んでいて、これらすべての問題に直面しているためです。

于 2010-11-06T23:11:54.197 に答える
3

これは古い質問ですが、私はまだ答えたいと思っています。通常、「didUpdateToLocation」への最初の呼び出しは古い値であり、常にタイムスタンプを確認する必要があります。アップルのドキュメントから:

NSDate* eventDate = newLocation.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (abs(howRecent) < 15.0)
{
   // use the value
}
于 2011-06-15T05:44:47.047 に答える
2

あなたのメソッドでは、許容可能な値についてのプロパティをdidUpdateテストし、不可能な(またはありそうもない!)値を投げることができます。newLocation.horizontalAccuracy

于 2010-11-07T00:25:08.643 に答える