1

現在地を見つけるのに 15 秒ほどかかる場合があるという問題があります。それどころか、Google マップはほとんどの場合、数秒以内に私の場所を見つけてくれます。とにかく Core Location と CLLocationManager を高速化して、ユーザーの位置をより速く見つけることができるかどうか疑問に思っています。これが私のセットアップです

self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.activityType = CLActivityTypeFitness;
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
[self.locationManager startUpdatingLocation];
[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(checkAccuracy:) userInfo:nil repeats:YES];

CLLocationManagerDelegate の場合、次のものがあります。

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    CLLocation* location = [locations lastObject];
    NSDate* eventDate = location.timestamp;
    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
    if (abs(howRecent) < 15.0) {
        // If the event is recent, do something with it.
        NSLog(@"latitude %+.6f, longitude %+.6f\n",
          location.coordinate.latitude,
          location.coordinate.longitude);

    [[NSNotificationCenter defaultCenter] postNotificationName:kLocationChanged object:nil];

}    

}

最後の通知は、マップ ビューの中心を変更します。これについて何か考えはありますか?私は何かを逃していますか?

4

2 に答える 2

1

問題は精度です。位置精度が 10 メートル近くになるまで値を取得していません。仕様についてはわかりませんが、個人的にはより広い精度を使用し、最初の位置を取得するときに、位置マネージャーで必要な精度を変更します。
ドキュメントには次のように記載されています。

高精度の位置データを要求する場合、位置情報サービスによって配信される最初のイベントには、要求した精度がない場合があります。位置情報サービスは、最初のイベントをできるだけ早く配信します。次に、要求された精度で場所を特定し続け、そのデータが利用可能になったときに、必要に応じて追加のイベントを配信します。

しかし、私の経験ではそうではありません。精度を高く設定すると、最初の場所を取得するのに時間がかかります。おそらく、より多くのリソースを「パワーアップ」する必要があるためです(推測です)。

于 2013-11-05T18:25:23.690 に答える
0
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

より多くのバッテリーを消費しますが、より多くの位置情報の更新を取得できます。精度の低い信号をフィルタリングし、GPS 信号のタイムスタンプをチェックして古い更新を無視するように注意してください。

于 2016-03-20T06:09:56.047 に答える