Search in sources :

Example 11 with Files

use of au.gov.amsa.util.Files in project risky by amsa-code.

the class LMSAdhocMain method main.

public static void main(String[] args) throws FileNotFoundException, IOException {
    Map<Integer, Info> ships = ShipStaticData.getMapFromResource("/ship-data-2014.txt");
    Pattern pattern = Pattern.compile(".*\\.track");
    File base = new File("/media/an/binary-fixes-lms2");
    List<File> files = Files.find(new File(base, "2016"), pattern);
    log.info("files=" + files.size());
    Func2<Fix, Fix, Integer> ascendingTime = (a, b) -> ((Long) a.time()).compareTo(b.time());
    String[] shapes = new String[] { "fremantle_port_limits_pl.zip", "dampier_port_limits_pl.zip", "port_hedland_port_limits_pl.zip" };
    File shapeBase = new File("/media/an/shapefiles/port-boundaries");
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm").withZone(ZoneOffset.UTC);
    System.out.println("region, mmsi, imo, class, type, lat, lon, timeUTC");
    for (String shape : shapes) {
        final String shapeName = shape.replace("_port_limits_pl.zip", "");
        try (InputStream is = new FileInputStream(new File(shapeBase, shape))) {
            Shapefile region = Shapefile.fromZip(is);
            Observable.from(files).filter(file -> !file.getName().startsWith("503")).concatMap(file -> detectCrossings(file, region)).toSortedList(// 
            ascendingTime).flatMapIterable(// 
            Functions.identity()).doOnNext(fix -> {
                Info info = ships.get(fix.mmsi());
                String type = "";
                if (info != null) {
                    if (info.shipType.isPresent())
                        type = ShipTypeDecoder.getShipType(info.shipType.get());
                    else
                        type = "";
                }
                String t = formatter.format(ZonedDateTime.ofInstant(Instant.ofEpochMilli(fix.time()), ZoneOffset.UTC)).replace("[UTC]", "");
                String imo = info == null ? "" : info.imo.orElse("");
                System.out.format("%s,%s,%s,%s,\"%s\",%s,%s,%s\n", shapeName, fix.mmsi(), imo, fix.aisClass().name(), type, fix.lat(), fix.lon(), t);
            }).count().toBlocking().single();
        }
    }
}
Also used : Info(au.gov.amsa.navigation.ShipStaticData.Info) Logger(org.slf4j.Logger) ShipTypeDecoder(au.gov.amsa.ais.ShipTypeDecoder) ZonedDateTime(java.time.ZonedDateTime) LoggerFactory(org.slf4j.LoggerFactory) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) Instant(java.time.Instant) Files(au.gov.amsa.util.Files) File(java.io.File) FileNotFoundException(java.io.FileNotFoundException) Observable(rx.Observable) List(java.util.List) BinaryFixes(au.gov.amsa.risky.format.BinaryFixes) Func2(rx.functions.Func2) DateTimeFormatter(java.time.format.DateTimeFormatter) Map(java.util.Map) Fix(au.gov.amsa.risky.format.Fix) Shapefile(au.gov.amsa.gt.Shapefile) ZoneOffset(java.time.ZoneOffset) Pattern(java.util.regex.Pattern) ShipStaticData(au.gov.amsa.navigation.ShipStaticData) InputStream(java.io.InputStream) Functions(com.github.davidmoten.rx.Functions) Pattern(java.util.regex.Pattern) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) Info(au.gov.amsa.navigation.ShipStaticData.Info) FileInputStream(java.io.FileInputStream) Fix(au.gov.amsa.risky.format.Fix) Shapefile(au.gov.amsa.gt.Shapefile) File(java.io.File) DateTimeFormatter(java.time.format.DateTimeFormatter)

Example 12 with Files

use of au.gov.amsa.util.Files in project risky by amsa-code.

the class PositionsInGbrMain method main.

public static void main(String[] args) throws FileNotFoundException, IOException {
    long t = System.currentTimeMillis();
    File out = new File("target/positions.txt");
    out.delete();
    try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(out)))) {
        Pattern pattern = Pattern.compile(".*\\.track");
        List<File> list = new ArrayList<File>();
        list.addAll(Files.find(new File("/media/an/binary-fixes-5-minute/2014"), pattern));
        list.addAll(Files.find(new File("/media/an/binary-fixes-5-minute/2015"), pattern));
        list.addAll(Files.find(new File("/media/an/binary-fixes-5-minute/2016"), pattern));
        AtomicInteger count = new AtomicInteger();
        int numFiles = list.size();
        AtomicInteger fileNumber = new AtomicInteger(0);
        // 
        Observable.from(list).groupBy(f -> count.getAndIncrement() % // 
        Runtime.getRuntime().availableProcessors()).flatMap(files -> // 
        files.doOnNext(file -> {
            int n = fileNumber.incrementAndGet();
            if (n % 1000 == 0)
                System.out.println("complete: " + new DecimalFormat("0.0").format(n / (double) numFiles * 100) + "%");
        }).concatMap(// 
        BinaryFixes::from).filter(// 
        x -> inGbr(x)).onBackpressureBuffer().subscribeOn(// 
        Schedulers.computation())).count().doOnNext(// 
        System.out::println).toBlocking().subscribe();
    }
    System.out.println((System.currentTimeMillis() - t) + "ms");
}
Also used : BufferedWriter(java.io.BufferedWriter) DecimalFormat(java.text.DecimalFormat) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) Files(au.gov.amsa.util.Files) File(java.io.File) FileNotFoundException(java.io.FileNotFoundException) ArrayList(java.util.ArrayList) Observable(rx.Observable) List(java.util.List) BinaryFixes(au.gov.amsa.risky.format.BinaryFixes) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Fix(au.gov.amsa.risky.format.Fix) OutputStreamWriter(java.io.OutputStreamWriter) Pattern(java.util.regex.Pattern) Schedulers(com.github.davidmoten.rx.Schedulers) Pattern(java.util.regex.Pattern) DecimalFormat(java.text.DecimalFormat) ArrayList(java.util.ArrayList) BufferedWriter(java.io.BufferedWriter) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) FileOutputStream(java.io.FileOutputStream) BinaryFixes(au.gov.amsa.risky.format.BinaryFixes) OutputStreamWriter(java.io.OutputStreamWriter) File(java.io.File)

Example 13 with Files

use of au.gov.amsa.util.Files 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

Files (au.gov.amsa.util.Files)13 File (java.io.File)13 Pattern (java.util.regex.Pattern)13 Observable (rx.Observable)13 List (java.util.List)12 BinaryFixes (au.gov.amsa.risky.format.BinaryFixes)10 Fix (au.gov.amsa.risky.format.Fix)7 IOException (java.io.IOException)7 Schedulers (rx.schedulers.Schedulers)6 FileOutputStream (java.io.FileOutputStream)5 Instant (java.time.Instant)5 DateTimeFormatter (java.time.format.DateTimeFormatter)5 ArrayList (java.util.ArrayList)5 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)5 Logger (org.slf4j.Logger)5 LoggerFactory (org.slf4j.LoggerFactory)5 BufferedWriter (java.io.BufferedWriter)4 OutputStreamWriter (java.io.OutputStreamWriter)4 DecimalFormat (java.text.DecimalFormat)4 ZonedDateTime (java.time.ZonedDateTime)4