Search in sources :

Example 46 with Fix

use of au.gov.amsa.risky.format.Fix in project risky by amsa-code.

the class NmeaGzToBinaryFixesWithMmsiGzMain method convert.

private static void convert(File file, File outputDir, AtomicInteger n) {
    try {
        log.info("converting " + file.getName() + ", gzipped file size = " + (double) file.length() / 1024 / 1024 + "MB");
        long t = System.currentTimeMillis();
        Observable<String> nmea = Streams.nmeaFromGzip(file).onErrorResumeNext(e -> Observable.empty());
        long count;
        String outFilename = file.getName().substring(0, file.getName().indexOf(".txt.gz")) + ".track.gz";
        File outFile = new File(outputDir, outFilename);
        try (OutputStream out = new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(outFile)))) {
            count = // 
            nmea.compose(// 
            o -> Streams.extractFixes(o)).filter(// 
            x -> inRegion(x)).filter(// 
            x -> x.time() > 0 && x.time() < TimeUnit.DAYS.toMillis(80 * 365)).doOnNext(// 
            fix -> BinaryFixes.write(fix, out, BinaryFixesFormat.WITH_MMSI)).countLong().toBlocking().first();
        }
        double seconds = (System.currentTimeMillis() - t) / 1000.0;
        n.incrementAndGet();
        log.info(// 
        n.get() + ": file=" + file.getName() + ", count=" + // "
        count + ", time=" + seconds + // 
        "s" + ", rate = " + (count / seconds) + // 
        " lines/s" + ", outputFileSize = " + outFile.length() / 1024.0 / 1024 + "MB");
    } catch (IOException e) {
        throw new UncheckedIOException(e);
    }
}
Also used : OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) File(java.io.File) BufferedOutputStream(java.io.BufferedOutputStream) BinaryFixesFormat(au.gov.amsa.risky.format.BinaryFixesFormat) Observable(rx.Observable) UncheckedIOException(java.io.UncheckedIOException) TimeUnit(java.util.concurrent.TimeUnit) Logger(org.apache.log4j.Logger) BinaryFixes(au.gov.amsa.risky.format.BinaryFixes) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Streams(au.gov.amsa.ais.rx.Streams) Fix(au.gov.amsa.risky.format.Fix) Schedulers(rx.schedulers.Schedulers) GZIPOutputStream(java.util.zip.GZIPOutputStream) GZIPOutputStream(java.util.zip.GZIPOutputStream) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) BufferedOutputStream(java.io.BufferedOutputStream) GZIPOutputStream(java.util.zip.GZIPOutputStream) FileOutputStream(java.io.FileOutputStream) UncheckedIOException(java.io.UncheckedIOException) IOException(java.io.IOException) UncheckedIOException(java.io.UncheckedIOException) File(java.io.File) BufferedOutputStream(java.io.BufferedOutputStream)

Example 47 with Fix

use of au.gov.amsa.risky.format.Fix in project risky by amsa-code.

the class OperatorEffectiveSpeedCheckerTest method testSpiritOfTasmania.

@Test
public void testSpiritOfTasmania() throws ParseException {
    SegmentOptions options = SegmentOptions.builder().acceptAnyFixHours(12L).maxSpeedKnots(50).build();
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    df.setTimeZone(TimeZone.getTimeZone("UTC"));
    Fix a = new FixImpl(1, -39.572643f, 145.38763f, df.parse("2015-01-01T03:36:36").getTime(), AisClass.A);
    Fix b = new FixImpl(1, -40.095074f, 145.71864f, df.parse("2015-01-01T04:52:25").getTime(), AisClass.A);
    System.out.println(Position.create(a.lat(), a.lon()).getDistanceToKm(Position.create(b.lat(), b.lon())) / 1.852 / (75.81666666 / 60) + "knots");
    assertEquals(27.605441702145423, EffectiveSpeedChecker.effectiveSpeedKnots(a, b, options).get(), 0.00001);
}
Also used : Fix(au.gov.amsa.risky.format.Fix) SegmentOptions(au.gov.amsa.geo.model.SegmentOptions) SimpleDateFormat(java.text.SimpleDateFormat) DateFormat(java.text.DateFormat) FixImpl(au.gov.amsa.risky.format.FixImpl) SimpleDateFormat(java.text.SimpleDateFormat) Test(org.junit.Test)

Example 48 with Fix

use of au.gov.amsa.risky.format.Fix in project risky by amsa-code.

the class AdHocMain method main.

public static void main(String[] args) throws IOException {
    long start = ZonedDateTime.from(DateTimeFormatter.ISO_DATE_TIME.parse("2014-05-13T00:00:00Z")).toEpochSecond() * 1000;
    long finish = ZonedDateTime.from(DateTimeFormatter.ISO_DATE_TIME.parse("2014-05-27T00:00:00Z")).toEpochSecond() * 1000;
    Pattern pattern = Pattern.compile(".*\\.track");
    PrintStream out = new PrintStream("target/output.txt");
    out.println("mmsi\ttime\tlat\tlong\tcourse\tspeedKnots");
    List<File> files = Files.find(new File("/media/an/binary-fixes-5-minute/2014"), pattern);
    Observable.from(files).flatMap(file -> extract(file, start, finish).subscribeOn(Schedulers.computation())).filter(fix -> MmsiValidator2.INSTANCE.isValid(fix.mmsi())).map(f -> String.format("%s\t%s\t%s\t%s\t%s\t%s", f.mmsi(), formatDateTime(f.time()), f.lat(), f.lon(), get(f.courseOverGroundDegrees()), get(f.speedOverGroundKnots()))).doOnNext(out::println).lift(Logging.<String>logger().showCount().every(10000).log()).count().doOnTerminate(out::close).toBlocking().single();
}
Also used : PrintStream(java.io.PrintStream) ZonedDateTime(java.time.ZonedDateTime) Logging(com.github.davidmoten.rx.slf4j.Logging) IOException(java.io.IOException) Instant(java.time.Instant) Files(au.gov.amsa.util.Files) File(java.io.File) Observable(rx.Observable) List(java.util.List) BinaryFixes(au.gov.amsa.risky.format.BinaryFixes) Func2(rx.functions.Func2) DateTimeFormatter(java.time.format.DateTimeFormatter) Fix(au.gov.amsa.risky.format.Fix) Schedulers(rx.schedulers.Schedulers) Optional(java.util.Optional) MmsiValidator2(au.gov.amsa.util.identity.MmsiValidator2) ZoneOffset(java.time.ZoneOffset) Pattern(java.util.regex.Pattern) Functions(com.github.davidmoten.rx.Functions) Pattern(java.util.regex.Pattern) PrintStream(java.io.PrintStream) File(java.io.File)

Aggregations

Fix (au.gov.amsa.risky.format.Fix)48 Test (org.junit.Test)27 File (java.io.File)18 BinaryFixes (au.gov.amsa.risky.format.BinaryFixes)12 Observable (rx.Observable)12 IOException (java.io.IOException)11 List (java.util.List)10 FileOutputStream (java.io.FileOutputStream)9 Pattern (java.util.regex.Pattern)7 Schedulers (rx.schedulers.Schedulers)7 SegmentOptions (au.gov.amsa.geo.model.SegmentOptions)6 Shapefile (au.gov.amsa.gt.Shapefile)6 BinaryFixesFormat (au.gov.amsa.risky.format.BinaryFixesFormat)6 Files (au.gov.amsa.util.Files)6 InputStream (java.io.InputStream)6 TimeUnit (java.util.concurrent.TimeUnit)6 MmsiValidator2 (au.gov.amsa.util.identity.MmsiValidator2)5 BufferedOutputStream (java.io.BufferedOutputStream)5 ByteArrayInputStream (java.io.ByteArrayInputStream)5 OutputStream (java.io.OutputStream)5