Ich verwende Location Services
in einigen meiner Apps. Ich habe eine Methode, die ich in meiner locationManager:didUpdateToLocation:fromLocation:
Methode verwenden, um schlechte, ungenaue oder zu weit entfernte Standorte herauszufiltern. Und um GPS-Jitter zu minimieren. Hier ist, was ich verwende:iOS Location Services Methode zum Filtern ungültiger/ungenauer Standorte
/**
* 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
Hat jemand Verbesserungen an dieser Methode, um es genauer zu machen? Ist zu hoch von horizontalAccuracy
und wird viele ungültige Standorte erhalten? Soll ich das senken?
Gibt es eine Möglichkeit, den "Jitter" zu bekommen, den GPS auf dem iPhone gibt?
Ich beginne die Arbeit an etwas ähnliches. Ich denke darüber nach, einen Kalman-Filter zu implementieren, bin mir aber nicht sicher, ob das Über-Töten sein wird. Ich bin daran interessiert, die Antworten der Leute auf diese Frage zu sehen. – scord
Ja, ich habe mir auch einen Kalman-Filter angeschaut, aber die Mathematik dafür ist verrückt. –