iphone updateToLocation fonctionne différemment sur les réseaux 3G par rapport à un réseau sans fil?

StackOverflow https://stackoverflow.com/questions/1580920

Question

Je simple MapView qui a la méthode viewDidLoad suivante et didupdate à l'emplacement:

- (void)viewDidLoad {
    NSLog(@"in view did load");
    [super viewDidLoad];
    self.mapView.showsUserLocation = YES;
    self.put_url = nil;


    locationManager = [[CLLocationManager alloc] init];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
    [locationManager setDelegate:self];

    noUpdates = 0;
    [locationManager startUpdatingLocation];

    self.availableParking = [[NSMutableArray alloc] init];
    //self.availableParking = nil;

}


- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    NSLog(@"in didupdatetolocatoin");
     if([newLocation horizontalAccuracy] < 100 && [newLocation horizontalAccuracy] > 0) {


    // Add annotation to map
    DDAnnotation *annotation = [[DDAnnotation alloc] initWithCoordinate:newLocation.coordinate title:@"Park Here?"];

    MKCoordinateRegion region;
    MKCoordinateSpan   span;
    span.latitudeDelta = 0.05;
    span.longitudeDelta = 0.05;


    region.span = span;
    region.center = newLocation.coordinate;



    self.mapView.region = region;



    NSLog(@"in didupdatetolocation");
    noUpdates++;
         NSLog(@"IN UPDATELOCATION NOUPDATES = %d",noUpdates);
    if (noUpdates == 1) {
        [self.mapView addAnnotation:annotation];
        NSLog(@"ADDED ANNOTATION IN didUpdateToLocation!!");


        [locationManager stopUpdatingLocation];
        [self.settingsViewController setState:self.mapView.userLocation.subtitle andCity:@"fuckface"];



        NSLog(@"STOPPED UPDATING LOCATION");


        UpdateLocation *updatedLocation = [[[UpdateLocation alloc] initWithUserid:@"fuckface" andCoordinate:newLocation.coordinate withMapViewController:self]
                                           autorelease];
        NSLog(@"Lat = %f, Long = %f",newLocation.coordinate.latitude,newLocation.coordinate.longitude);
        //[NSThread detachNewThreadSelector:@selector(getLocations) toTarget:self withObject:nil];
        [[NSNotificationCenter defaultCenter]
         addObserver:self
         selector:@selector(sendUpdate)
         name:@"NoteFromOne"
         object:updatedLocation]; 


        }
    // We only update location once, and let users to do the rest of the changes by dragging annotation to place they want

        }  else {
            NSLog(@"Accuracy not good enough %lf", [newLocation horizontalAccuracy]);

        }



}

Lorsque Im connecté à un réseau sans fil, il fonctionne parfaitement dans le zoom et laissant tomber une broche d'annotation dans mon emplacement actuel. Sur le réseau 3G, il effectue un zoom avant ou jamais tomber la goupille. Une quelconque idée du pourquoi? Merci à l'avance.

Voici quelques captures d'écran:

Avec la 3G: texte alt http://www.freeimagehosting.net/uploads/fe7fcbb2ea.jpg

Avec wifi: texte alt http://www.freeimagehosting.net/uploads/6b653e60a7.jpg

Était-ce utile?

La solution

L'unité GPS n'a rien à voir avec la connexion réseau (sauf si le signal GPS ne sont pas disponibles, dans ce cas, le GPS peut essayer d'utiliser le hotspot wifi ou la cellule de votre appareil est connecté à afin de déduire votre position) . Il fonctionne indépendamment si le signal GPS est disponible, et le réseau est utilisé uniquement pour montrer effectivement la carte. À partir du code que vous avez posté ciselée, vous montrer que la carte lorsque vous atteignez une précision horizontale à moins de 100 mètres, sinon vous laissez l'unité GPS mise à jour de l'emplacement. Toutefois, si vous essayez votre code à l'endroit exact SAME, l'unité GPS sur votre appareil doit toujours retourner les mêmes mises à jour. Par conséquent, je ne comprends vraiment pas le comportement que vous décrivez: cela ne serait possible que si l'unité GPS retourné différentes mises à jour pour le même lieu lorsqu'une connexion réseau différent est disponible car le signal GPS ne sont pas disponibles. Voyez-vous la même latitude / longitude dans les deux cas ou non? Voyez-vous la même précision? Veillez à mesurer ce exactement au même endroit dans les deux cas.

Si vous obtenez les mêmes mises à jour, il peut être possible que votre connexion cellulaire 3G est tout simplement pas assez puissant ou est disponible seulement en apparence, de sorte que vous n'avez pas la carte. Essayez de tester la vitesse de votre réseau 3G au même endroit.

Une considération connexe. Vous devez permettre à l'unité GPS de travailler jusqu'à ce que ce soit un laps de temps écoulé (disons 20 secondes, utilisez NSTimer pour cela) ou jusqu'à ce que vous atteignez un niveau de précision spécifiée, selon la première éventualité. Sinon, vous pouvez finir par consommer trop la batterie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top