2010-12-06 5 views
10

Ich beginne eine neue App, die die CoreLocation- und Mapkit-Frameworks verwendet.CLLocation gibt negative Geschwindigkeit zurück

Mein Problem ist, die aktuelle Geschwindigkeit zu bekommen bringt mir immer einen negativen Wert, ich habe mein iPhone mit mir zu Orten mit einem guten 3g Signal und es ist egal, location.speed Wert ist immer -1.

hier ist der Code, der zählt:

#define kRequiredAccuracy 1500.0 //meters 
#define kMaxAge 60.0 //seconds 

in der init-Methode:

self.locationManager=[[CLLocationManager alloc] init]; 
self.locationManager.delegate=self; 
self.locationManager.desiredAccuracy=kCLLocationAccuracyNearestTenMeters; 

dann didUpdateToLocation:

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

    NSTimeInterval ageInSeconds = [newLocation.timestamp timeIntervalSinceNow]; 
    NSLog(@"Location: %@", [newLocation description]); 

    if(newLocation.horizontalAccuracy > kRequiredAccuracy || fabs(ageInSeconds) > kMaxAge) 
    { 
     NSLog(@"inacurate position"); 
     [self.delegate inacuratePosition]; 

    } 
    else { 

    [self.delegate locationUpdate:newLocation andOldLocation:oldLocation]; 
    location=newLocation.coordinate; 


    } 


    if(tracking) 
    { 
    [self updatePosition]; 
    } 
    if(firstTime) 
    { 
     [self placeStartMark]; 
     firstTime=FALSE; 
    } 



} 

und schließlich im View-Controller, in dem ich m Implementierung des Protokolls:

- (void)locationUpdate:(CLLocation *)newLocation andOldLocation:(CLLocation*)oldLocation{ 

    double speed = [newLocation speed] *3.6; 



    double altitude= [newLocation altitude]; 
    [self checkMaxSpeedAndAltitude:speed :altitude]; 
    if(speed< 0) 
     speed=0; 



    locationLabel.text=[NSString stringWithFormat:@"speed: %f km/h altitude: %f m", speed,altitude]; 
} 

Ich werde verrückt, wenn jemand eine Lösung kennt, wird es sicher hilfreich sein. Dank

+0

Sie erwähnen ein gutes 3G-Signal, wenn dies für "gute" standortbasierte Anwendungen nahezu unerheblich ist. Wenn Sie keine Satelliten sehen, erhalten Sie keine guten Informationen. Überprüfen Sie, dass Ihre horizontale Genauigkeit ist klein (weniger als 200 Meter), es ist ein guter Betrüger, um zu sehen, dass Sie Satelliten haben und nicht nur Zelle Turm Triangulation) – KevinDTimm

+0

ok danke ich werde es überprüfen – JonLOo

+0

Ich habe eine sogar mit einer 65m horizontalen Genauigkeit überprüft, Ich bekomme eine negative Geschwindigkeit und eine Höhe. – JonLOo

Antwort

13

In der Regel erhalten Sie negative Höhe und Geschwindigkeit, wenn der verwendete Ortserkennungsmechanismus es nicht unterstützt. Zum Beispiel, wenn Wi-Fi oder Zelltriangulation verwendet wird. Sind Sie sicher, dass Sie GPS-Updates erhalten, also testen Sie unter freiem Himmel? Auch dann erhalten Sie immer noch Updates für WLAN- und Mobilfunkmaststandorte, sodass Sie sie herausfiltern müssen.

65 m horizontale Genauigkeit ist typisch für Wi-Fi-Standortaktualisierungen.

+0

Endlich funktioniert es weniger. Wie auch immer, danke für die Info, ich wusste nicht, dass du keine Geschwindigkeit via WLAN oder Zellenstandort bekommen kannst. – JonLOo

+0

Ich bekomme immer eine negative Geschwindigkeit. Es spielt keine Rolle, ob ich WiFi oder einen Mobilfunkmast oder draußen im Freien benutze. Alle anderen Standortparameter sind korrekt. – User382

+1

Sie erhalten eine negative Geschwindigkeit, wenn Sie kein GPS haben. –