analyze static method

Stream<LocationQuality> analyze(
  1. Stream<Location> source, {
  2. LocationQualityConfig config = const LocationQualityConfig(),
})

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,
    );
  });
}