Search in sources :

Example 6 with Files

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

the class CountCrossingsIntoRegionMain method main.

public static void main(String[] args) {
    String shape = "/home/dxm/temp/amsa_atba_ningaloo_reef_pl.shp";
    // String shape = "/home/dxm/temp/amb06_map_eez_pl.shp";
    Shapefile region = Shapefile.from(new File(shape));
    // test load
    region.contains(0, 0);
    Func2<Fix, Fix, Integer> ascendingTime = (a, b) -> ((Long) a.time()).compareTo(b.time());
    Map<Integer, Info> ships = ShipStaticData.getMapFromResource("/ship-data.txt");
    Pattern pattern = Pattern.compile(".*\\.track");
    List<File> files = Files.find(new File("/media/an/binary-fixes-5-minute/2012"), pattern);
    files.addAll(Files.find(new File("/media/an/binary-fixes-5-minute/2013"), pattern));
    files.addAll(Files.find(new File("/media/an/binary-fixes-5-minute/2014"), pattern));
    files.addAll(Files.find(new File("/media/an/binary-fixes-5-minute/2015"), pattern));
    log.info("files=" + files.size());
    int count = Observable.from(files).concatMap(file -> detectCrossings(file, region)).toSortedList(ascendingTime).flatMap(o -> Observable.from(o)).doOnNext(fix -> {
        Info info = ships.get(fix.mmsi());
        if (info != null) {
            String type;
            if (info.shipType.isPresent())
                type = ShipTypeDecoder.getShipType(info.shipType.get());
            else
                type = "UNKNOWN";
            String t = DateTimeFormatter.ISO_DATE_TIME.format(ZonedDateTime.ofInstant(Instant.ofEpochMilli(fix.time()), ZoneId.of("UTC")));
            System.out.println(t + ", mmsi=" + fix.mmsi() + ", class=" + fix.aisClass().name() + ", lengthMetres=" + info.lengthMetres().orElse(null) + ", type=" + type + ", lat=" + fix.lat() + ", lon=" + fix.lon());
        }
    }).count().toBlocking().single();
    System.out.println("count=" + count);
}
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) Instant(java.time.Instant) Files(au.gov.amsa.util.Files) File(java.io.File) ZoneId(java.time.ZoneId) 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) Pattern(java.util.regex.Pattern) ShipStaticData(au.gov.amsa.navigation.ShipStaticData) Pattern(java.util.regex.Pattern) Info(au.gov.amsa.navigation.ShipStaticData.Info) Fix(au.gov.amsa.risky.format.Fix) Shapefile(au.gov.amsa.gt.Shapefile) File(java.io.File)

Example 7 with Files

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

the class GeoffHAdhocMain method main.

public static void main(String[] args) {
    int option = 1;
    if (option == 1) {
        String filename = "/home/dxm/temp/235099876.track";
        // String filename =
        // "/media/an/binary-fixes-5-minute/2014/235099876.track";
        File file = new File(filename);
        BinaryFixes.from(file).doOnNext(System.out::println).toSortedList((a, b) -> Long.compare(a.time(), b.time())).flatMap(Observable::from).doOnCompleted(() -> System.out.println("complete")).subscribe();
    } else if (option == 2) {
        Observable<File> files = Observable.from(Files.find(new File("/media/an/binary-fixes-5-minute/2014"), Pattern.compile("\\d+\\.track")));
        Func2<Pair<File, Long>, Pair<File, Long>, Pair<File, Long>> earliest = (p1, p2) -> {
            if (p1.b() <= p2.b())
                return p1;
            else
                return p2;
        };
        files.filter(file -> !file.getName().equals("0.track")).flatMap(file -> BinaryFixes.from(file).<Pair<File, Long>>map(fix -> Pair.create(file, fix.time())).reduce(earliest).doOnNext(p -> System.out.println(file + ": " + p)).subscribeOn(Schedulers.computation())).reduce(earliest).doOnNext(System.out::println).toBlocking().single();
    }
}
Also used : Pair(au.gov.amsa.util.Pair) Func2(rx.functions.Func2) BinaryFixes(au.gov.amsa.risky.format.BinaryFixes) Schedulers(rx.schedulers.Schedulers) Pattern(java.util.regex.Pattern) Files(au.gov.amsa.util.Files) File(java.io.File) Observable(rx.Observable) File(java.io.File) Observable(rx.Observable) Func2(rx.functions.Func2)

Example 8 with Files

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

the class VesselsInCoverageMain method main.

public static void main(String[] args) throws IOException {
    long t = System.currentTimeMillis();
    File out = new File("target/mmsi.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();
        // 
        Observable.from(list).groupBy(f -> count.getAndIncrement() % // 
        Runtime.getRuntime().availableProcessors()).flatMap(// 
        files -> toFixes(files, Schedulers.computation())).distinct(// 
        fix -> fix.mmsi() + fix.aisClass().name()).sorted(// 
        (a, b) -> Integer.compare(a.mmsi(), b.mmsi())).filter(// 
        fix -> MmsiValidator2.INSTANCE.isValid((long) fix.mmsi())).doOnNext(// 
        fix -> write(writer, fix)).toBlocking().subscribe();
    }
    System.out.println((System.currentTimeMillis() - t) + "ms");
}
Also used : BufferedWriter(java.io.BufferedWriter) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) Scheduler(rx.Scheduler) Files(au.gov.amsa.util.Files) File(java.io.File) ArrayList(java.util.ArrayList) Observable(rx.Observable) List(java.util.List) GroupedObservable(rx.observables.GroupedObservable) BinaryFixes(au.gov.amsa.risky.format.BinaryFixes) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Fix(au.gov.amsa.risky.format.Fix) Schedulers(rx.schedulers.Schedulers) OutputStreamWriter(java.io.OutputStreamWriter) MmsiValidator2(au.gov.amsa.util.identity.MmsiValidator2) Pattern(java.util.regex.Pattern) Pattern(java.util.regex.Pattern) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) FileOutputStream(java.io.FileOutputStream) ArrayList(java.util.ArrayList) OutputStreamWriter(java.io.OutputStreamWriter) File(java.io.File) BufferedWriter(java.io.BufferedWriter)

Example 9 with Files

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

the class HeadingCourseDiffMain method main.

public static void main(String[] args) {
    Pattern pattern = Pattern.compile(".*\\.track");
    List<File> files = Files.find(new File("/media/an/binary-fixes-5-minute/2014"), pattern);
    // files.addAll(Files.find(new
    // File("/media/an/binary-fixes-5-minute/2013"), pattern));
    // files.addAll(Files.find(new
    // File("/media/an/binary-fixes-5-minute/2014"), pattern));
    // files.addAll(Files.find(new
    // File("/media/an/binary-fixes-5-minute/2015"), pattern));
    log.info("files=" + files.size());
    ConcurrentHashMap<Integer, Long> map = new ConcurrentHashMap<>();
    int count = // 
    Observable.from(files).concatMap(file -> BinaryFixes.from(file).filter(f -> f.courseOverGroundDegrees().isPresent() && f.headingDegrees().isPresent()).map(f -> Math.abs(Position.getBearingDifferenceDegrees(f.courseOverGroundDegrees().get(), // 
    f.headingDegrees().get()))).doOnNext(x -> {
        int bucket = (int) Math.round(x);
        map.compute(bucket, (n, num) -> num == null ? 1 : num + 1);
    })).count().toBlocking().single();
    System.out.println("count=" + count);
    for (Integer key : new TreeSet<Integer>(map.keySet())) {
        System.out.println(key + "\t" + map.get(key));
    }
}
Also used : Position(com.github.davidmoten.grumpy.core.Position) List(java.util.List) Logger(org.slf4j.Logger) BinaryFixes(au.gov.amsa.risky.format.BinaryFixes) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) LoggerFactory(org.slf4j.LoggerFactory) Pattern(java.util.regex.Pattern) Files(au.gov.amsa.util.Files) File(java.io.File) TreeSet(java.util.TreeSet) Observable(rx.Observable) Pattern(java.util.regex.Pattern) TreeSet(java.util.TreeSet) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) File(java.io.File)

Example 10 with Files

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

the class ByMmsiToDailyConverter method convert.

public static void convert(File input, File output) {
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneOffset.UTC);
    output.mkdirs();
    try {
        FileUtils.cleanDirectory(output);
    } catch (IOException e1) {
        throw new RuntimeException(e1);
    }
    {
        List<File> files = Files.find(input, Pattern.compile(".*\\.track"));
        System.out.println("found " + files.size() + " files");
        int bufferSize = 1000;
        Observable.from(files).flatMap(file -> BinaryFixes.from(file, true)).lift(Logging.<Fix>logger().showMemory().every(1000000).showCount("recordsMillions").log()).groupBy(fix -> dtf.format(Instant.ofEpochMilli(fix.time()))).flatMap(g -> g.buffer(bufferSize)).doOnNext(list -> {
            File file = new File(output, dtf.format(Instant.ofEpochMilli(list.get(0).time())) + ".fix");
            try (OutputStream os = new FileOutputStream(file, true)) {
                for (Fix fix : list) {
                    BinaryFixes.write(fix, os, BinaryFixesFormat.WITH_MMSI);
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }).count().toBlocking().single();
    }
}
Also used : OutputStream(java.io.OutputStream) Logger(org.slf4j.Logger) Logging(com.github.davidmoten.rx.slf4j.Logging) DecimalFormat(java.text.DecimalFormat) LoggerFactory(org.slf4j.LoggerFactory) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) FileUtils(org.apache.commons.io.FileUtils) Instant(java.time.Instant) Files(au.gov.amsa.util.Files) File(java.io.File) BufferedOutputStream(java.io.BufferedOutputStream) ArrayList(java.util.ArrayList) Observable(rx.Observable) List(java.util.List) DateTimeFormatter(java.time.format.DateTimeFormatter) Schedulers(rx.schedulers.Schedulers) ZoneOffset(java.time.ZoneOffset) Pattern(java.util.regex.Pattern) Collections(java.util.Collections) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) BufferedOutputStream(java.io.BufferedOutputStream) FileOutputStream(java.io.FileOutputStream) ArrayList(java.util.ArrayList) List(java.util.List) IOException(java.io.IOException) DateTimeFormatter(java.time.format.DateTimeFormatter) 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