Я использую службы определения местоположения
в нескольких своих приложениях.У меня есть метод, который я использую в своем методе locationManager:didUpdateToLocation:fromLocation:
для фильтрации плохих, неточных или слишком далеких местоположений. И минимизировать "дрожание" GPS. Вот что я использую:
/**
* Check if we have a valid location
*
* @version $Revision: 0.1
*/
+ (BOOL)isValidLocation:(CLLocation *)newLocation withOldLocation:(CLLocation *)oldLocation {
// Filter out nil locations
if (!newLocation) return NO;
// Filter out points by invalid accuracy
if (newLocation.horizontalAccuracy < 0) return NO;
if (newLocation.horizontalAccuracy > 66) return NO;
// Filter out points by invalid accuracy
#if !TARGET_IPHONE_SIMULATOR
if (newLocation.verticalAccuracy < 0) return NO;
#endif
// Filter out points that are out of order
NSTimeInterval secondsSinceLastPoint = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp];
if (secondsSinceLastPoint < 0) return NO;
// Make sure the update is new not cached
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
if (locationAge > 5.0) return NO;
// Check to see if old and new are the same
if ((oldLocation.coordinate.latitude == newLocation.coordinate.latitude) && (oldLocation.coordinate.longitude == newLocation.coordinate.longitude))
return NO;
return YES;
}//end
Есть ли у кого-нибудь улучшения этого метода, чтобы сделать его более точным? Является ли 66слишком высоким для horizontalAccuracy
и будет получено много недопустимых местоположений? Должен ли я снизить это?
Есть ли способ избавиться от "дрожания", которое дает GPS на iPhone?