Вы уже гарантируете, что обновления вашего местоположения менее пяти секунд. Вот что делает эта строка кода:
if (locationAge > 5.0) return;
Как заявляет progrmr, ключевая проблема здесь почти наверняка заключается в том, что вы полагаетесь на первоначальные оценки местоположения, которые имеют низкую точность, и поэтому кажется, что местоположение быстро перемещается, поскольку оно лучше фиксирует ваше местоположение. Сначала вам нужно убедиться, что oldLocation устанавливается только тогда, когда у вас есть точное начальное исправление местоположения, а затем сравнивать newLocations с этим oldLocation, только если они также имеют приемлемое разрешение.
Например, у вас может быть что-то вроде этого:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation{
// Ignore location updates that are less than 10m accuracy, or where the horizontalAccuracy < 0
// which indicates an invalid measurement.
NSLog(@"New location accuracy %.0fm", newLocation.horizontalAccuracy);
if ((newLocation.horizontalAccuracy < 0) || (newLocation.horizontalAccuracy > 10)) return;
// Ignore location updates that are more than five seconds old, to avoid responding to
// cached measurements.
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
if (locationAge > 5) return;
if (self.oldLocat == NULL)
{
// For the first acceptable measurement, simply set oldLocat and exit.
self.oldLocat = newLocation;
return;
}
// A second location has been identified. Calculate distance travelled.
// Do not set self.oldLocat from the oldLocation provided in this update, as we wish to
// use the last place we calculated distance from, not merely the last place that was
// provided in a location update.
CLLocationDistance distance = [newLocation distanceFromLocation:self.oldLocat];
NSLog(@"Distance: %.0fm", distance);
// This new location is now our old location.
self.oldLocat = newLocation;
}
Обратите внимание, что с помощью приведенного выше кода вам не требуется метод computeDistanceFrom: tO:, а также свойство self.newLocat фактически не требуется, по крайней мере в этом разделе кода.