Метод службы определения местоположения iOS для фильтрации недействительных/неточных местоположений

Я использую службы определения местоположенияв нескольких своих приложениях.У меня есть метод, который я использую в своем методе 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?

11
задан Nic Hubbard 2 April 2019 в 15:53
поделиться