2010-12-06 10 views
10

Zaczynam nową aplikację, która korzysta z coreLocation i frameworków mapkit.CLLOKACJA zwracająca ujemną prędkość

Mój problem polega na tym, że aktualna prędkość zawsze zwraca mi wartość ujemną, zabrałem ze sobą iPhone'a do miejsc z dobrym sygnałem 3g i nie ma to znaczenia, wartość position.speed wynosi zawsze -1.

Oto kod, który ma znaczenie:

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

w metodzie Init:

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

następnie 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; 
    } 



} 

i wreszcie w kontrolerze widoku, w którym” m realizujący protokół:

- (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]; 
} 

Jestem szalony, więc jeśli ktoś zna jakieś rozwiązanie, na pewno będzie pomocny. Dzięki

+0

Podajesz dobry sygnał 3G, gdy jest to prawie nieistotne dla "dobrych" aplikacji opartych na lokalizacji. Jeśli nie masz widoku satelitów, nie uzyskasz dobrej informacji. Sprawdź, czy twoja pozioma dokładność jest mała (mniej niż 200 metrów), to dobry znak, że masz satelity, a nie tylko triangulację wieży komórkowej) – KevinDTimm

+0

ok, dzięki, sprawdzę to. – JonLOo

+0

Sprawdziłem, czy mam poziomą dokładność 65 m, otrzymuję ujemną prędkość na wysokości. – JonLOo

Odpowiedz

13

Zazwyczaj uzyskuje się ujemną wysokość i prędkość, jeśli mechanizm wykrywania lokalizacji nie obsługuje tej wartości. Na przykład, gdy używana jest Wi-Fi lub triangulacja komórkowa. Czy jesteś pewien, że dostajesz aktualizacje GPS, więc czy testujesz pod wolnym niebem? Nawet wtedy nadal będziesz otrzymywać aktualizacje lokalizacji WiFi i wież komórkowych, więc musisz je odfiltrować.

Pozioma dokładność pozioma 65 m jest typowa dla aktualizacji lokalizacji Wi-Fi.

+0

W końcu działam mniej. W każdym razie dzięki za informację, nie wiedziałem, że nie można uzyskać prędkości przez wifi lub lokalizację komórki. – JonLOo

+0

Zawsze otrzymuję ujemną prędkość. Nie ma znaczenia, czy używam Wi-Fi lub wieży telefonicznej, czy też na otwartym niebie. Wszystkie pozostałe parametry lokalizacji są poprawne. – User382

+1

Otrzymujesz ujemną prędkość, gdy nie masz GPS. –