package au.gov.amsa.navigation; import java.io.FileNotFoundException; import java.io.IOException; import java.util.concurrent.TimeUnit; import com.github.davidmoten.rx.slf4j.Logging; import au.gov.amsa.ais.rx.Streams; import au.gov.amsa.navigation.DriftDetector.Options; import au.gov.amsa.risky.format.Downsample; import au.gov.amsa.risky.format.HasFix; import rx.functions.Func1; public class DriftDetectorMain { public static void main(String[] args) throws FileNotFoundException, IOException { System.out.println(Options.instance()); String filename = "/media/an/nmea/2013/NMEA_ITU_20130108.gz"; Streams.extractFixes(Streams.nmeaFromGzip(filename)) // parse positions // .compose(AisVesselPositions.positions()) // log .lift(Logging.<HasFix> logger().showCount().every(100000).log()) // group by mmsi .groupBy(f -> f.fix().mmsi()) // .flatMap(o -> o.compose(DriftDetector.detectDrift()) .compose(Downsample.minTimeStep(5, TimeUnit.MINUTES, isStartOfDrift()))) // .count() // .doOnNext(System.out::println) // .doOnError(System.err::println) // .subscribe(); } private static Func1<DriftCandidate, Boolean> isStartOfDrift() { return c -> c.driftingSince() == c.fix().time(); } }