getReportsAlongRoute method

Future<List<Report>> getReportsAlongRoute(
  1. List<GeoPoint> routePoints,
  2. double bufferDistance
)

Gets reports along a route (for a specific route corridor)

Implementation

Future<List<Report>> getReportsAlongRoute(List<GeoPoint> routePoints, double bufferDistance) async {
  try {
    final List<Report> allReports = [];

    // Query for each point with deduplication
    final Set<String> processedIds = {};

    // Convert GeoPoints to RaliPositions first for consistent handling
    final raliPositions = PositionConverter.geoPointsToRaliPositions(routePoints);

    // Take sampling along the route to avoid too many queries
    final sampledPositions = _samplePositions(raliPositions, 300.0); // 300m spacing

    // Convert sampled positions back to GeoPoints for queries
    final sampledGeoPoints = PositionConverter.raliPositionsToGeoPoints(sampledPositions);

    for (final point in sampledGeoPoints) {
      final nearbyReports = await getReportsNear(point, bufferDistance);

      for (final report in nearbyReports) {
        if (!processedIds.contains(report.id)) {
          processedIds.add(report.id!);
          allReports.add(report);
        }
      }
    }

    return allReports;
  } catch (e) {
    print('Error getting reports along route: $e');
    rethrow;
  }
}