+ (BOOL) isLocationValid:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
/* Filter invalid location objects */
if (!newLocation)
return FALSE;
/* Filter points with invalid accuracy */
if (newLocation.horizontalAccuracy < 0)
return FALSE;
// FIXME: This check on speed shouldn't be performed, according to the SDK documentation
/*#if ! TARGET_IPHONE_SIMULATOR
// Drop locations having negative speed value (ignore this on the simulator )
if (newLocation.speed < 0) {
NSLog(@"Dropped location having speed: %lf", newLocation.speed);
return FALSE;
}
#endif*/
#if TARGET_IPHONE_SIMULATOR
// Checking accuracy when using iphone simulator just to "simulate" the real world
if (newLocation.horizontalAccuracy > 200) {
NSLog(@"\nDropped location having accuracy: %lf and speed %lf\n",[newLocation horizontalAccuracy], [newLocation speed]);
return FALSE;
}
#endif
/*
// Check accuracy value
if (newLocation.horizontalAccuracy > kMIN_ACCURACY) {
NSLog(@"\nDropped location having accuracy: %lf and speed %lf\n",[newLocation horizontalAccuracy], [newLocation speed]);
return FALSE;
}
*/
// Filter unordered points
if (oldLocation) {
NSTimeInterval secondsBetweenPoints = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp];
if (secondsBetweenPoints < 0)
return FALSE;
}
NSLog(@"\nAccepted location having accuracy: %lf and speed %lf\n",[newLocation horizontalAccuracy], [newLocation speed]);
return TRUE;
}