1

背景:ユーザーが必要なときに数秒で位置情報を取得できるようにしたいと考えています。ただし、位置はほとんど不正確です。より正確な住所を再試行するかどうかをユーザーに確認したいと思います。

質問:次の推測が常に最後の推測よりも優れていることを保証するようにコーディングする方法.

私が試したこと:

CLLocationManager *locationManager;

- (CLLocationManager *)locationManager {
    if (locationManager != nil) {
        return locationManager;
    }
    locationManager = [[CLLocationManager alloc] init];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    [locationManager setDelegate:self];
    return locationManager;
}

-(void)myLocationClickedWithCount: (int) count{
    [[self locationManager] startUpdatingLocation];
    CLLocation *location = [locationManager location];
    CLGeocoder *locationGeocoded = [[CLGeocoder alloc] init];
    [locationGeocoded reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
        CLPlacemark *placemark = [placemarks objectAtIndex:0];
        if (!placemark){
            if (count > 0){
                //placemark not available, try again after 1 second
                sleep(1);
                [self myLocationClickedWithCount:count-1];
            }
            else{
                //Unable to get location after 3 tries
                UIAlertView *locationNotFoundAlert = [[UIAlertView alloc]initWithTitle:@"Unable to Locate" message:@"Would you like to try again?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil];
                locationNotFoundAlert.tag = locationNotFoundAlertTag;
                [locationNotFoundAlert show];
            }
        }else{
            // got location but not accurate.
            if (location.horizontalAccuracy > accuracyRadius) {
                UIAlertView *locationInaccurateAlert = [[UIAlertView alloc]initWithTitle:@"Inaccurate Location" message:[NSString stringWithFormat:@"Your GPS shows the radius of %.2f meters. Would you like to try again?",location.horizontalAccuracy] delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil];
                locationInaccurateAlert.tag = locationInaccurateAlertTag;
                [locationInaccurateAlert show];
            }else {
                address.text = placemark;
            }
        }
    }];
}

更新 ユーザーが再度尋ねると、推測するのに少し時間がかかる場合があります。どのようにコーディングすればよいか知りたいだけです。IE:[[self locationManager] startUpdatingLocation];もう一度電話する必要がありますか? または、これまでの場所をリセットします。したがって、GPS が持っている現在の情報に基づいて、2 回目の推測を改善するにはどうすればよいでしょうか (GPS がオンになっている時間が長いほど、精度が向上しますよね?)。

4

1 に答える 1

1

コードを介した精度に関してできることは何もありません...

   [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

あなたがすでに行ったこと...あなたが3GまたはEDGEを使用している場合、あなたの精度はかなり向上します(5-10mの精度レベルを達成することができます)。

あなたはiphoneGPS精度がどのように機能するかについて話しているAppleによるこの記事を参照することができます...

これが役立つことを願っています。

于 2012-04-12T16:18:22.977 に答える