2012-09-20 9 views
5

Hallo Freund ich mit GPS viele Post in Bezug auf Genauigkeit Problem gesehen, aber es funktioniert nicht die ganze ZeitIphone GPS gibt nicht eine genaue Breiten- und Längen

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

    NSString *latstr = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude]; 
    NSString *longstring=[NSStringstringWithFormat:@"%f",newLocation.coordinate.longitude]; 

    if (abs(howRecent)>5.0) 
    { 
     [self.locationManager startUpdatingLocation]; 
     return; 
     } 
    if(abs(newLocation.horizontalAccuracy)<0.0f) 
    { 
     [self.locationManager startUpdatingLocation]; 
     return; 
    } 
    if(newLocation.horizontalAccuracy>65.0f) 
    { 
     [self.locationManager startUpdatingLocation]; 
     return; 
    } 
    self.latstring = [latstr copy]; 
    self.longstr = [longstring copy]; 

    if((updateLocationFirst||loadFirstView)) 
    {  
     [[NSUserDefaults standardUserDefaults]setObject:latstring forKey:@"Latitude"]; 
     [[NSUserDefaults standardUserDefaults]setObject:longstr forKey:@"Longitude"]; 
     [self displayParticularDaySpecial]; 
     loadFirstView=FALSE; 
     updateLocationFirst=FALSE; 
     [self.locationManager stopUpdatingLocation]; 
    } 
} 

Hier ist das Problem ich die geografische Breite und Länge sende zu Die Google API in Bezug auf einige Adressen, wenn ich die Genauigkeit Wert verringern wird viel Zeit zum Laden und dieser Wert hat ein Problem, wenn Sie am Ziel in Bezug auf Ziel mit 0,6 Meilen Unterschied erreichen.

+1

Übrigens wird 'abs (newLocation.horizontalAccuracy) <0.0f' niemals wahr sein, oder? Wie kann der Absolutwert einer Zahl kleiner als Null sein? – Rob

Antwort

1

Haben Sie die gewünschte locationAccuracy in Ihrem CLLocationManager eingestellt? Standardmäßig ist der Bereich etwas breit.

Es dauert einige Zeit, um einen sehr genauen Wert zu erhalten.

2

Sie sollten sich auf die Location Awareness Programming Guide beziehen, die hervorragende Programmierbeispiele zur Bestimmung Ihres Standorts bietet.

Wie Sie in der Demo in diesem Dokument sehen werden, geben Sie normalerweise start the standard location manager an, welche Genauigkeit Sie benötigen. Und wenn Sie den Standortmanager gestartet haben, müssen Sie ihn nicht erneut starten (wie Sie es in Ihrem Codebeispiel zu tun scheinen). Die Methode didUpdateLocations wird immer wieder mit zunehmender Genauigkeit aufgerufen. Sie müssen den Standortmanager nicht erneut starten. Er wird so lange ausgeführt, bis Sie ihn deaktivieren. Per definitionem bedeutet es, wenn Sie in didUpdateLocations sind, dass es bereits eingeschaltet ist.

Ich merke auch, dass Sie die alte didUpdateToLocation verwenden. Wenn Sie für iOS 6 programmieren, möchten Sie wirklich didUpdateLocations verwenden, was die aktuelle Version dieser CLLocationManagerDelegate Methode ist.

Schließlich erwähnen Sie, dass es lange dauert, um Ihren Standort zu bekommen. Das ist sehr gut möglich. In bestimmten Bereichen werden Sie nie ganz nahe (oder überhaupt an einem Ort) sein. Ihre App sollte davon ausgehen, dass genaue Standorte eine Weile dauern. Wenn Sie nie einen wirklich genauen Standort erhalten, sollten Sie dies elegant handhaben, was sehr gut möglich ist.

Verwandte Themen