analyze static method
Implementation
static Stream<LocationQuality> analyze(
Stream<Location> source, {
LocationQualityConfig config = const LocationQualityConfig(),
}) {
final window = <Location>[];
Location? previous;
return source.asyncExpand((location) async* {
window.add(location);
if (window.length > config.windowSize) {
window.removeAt(0);
}
final accuracyScore = _accuracyScore(location, config);
final speedScore = _speedScore(previous, location, config);
final jitterScore = _jitterScore(window, config);
final overallScore =
(accuracyScore * 0.4) + (speedScore * 0.4) + (jitterScore * 0.2);
final isSpoofSuspected = _isSpoofSuspected(
previous,
location,
accuracyScore,
speedScore,
);
previous = location;
yield LocationQuality(
location: location,
accuracyScore: accuracyScore,
speedScore: speedScore,
jitterScore: jitterScore,
overallScore: overallScore,
isSpoofSuspected: isSpoofSuspected,
);
});
}