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();
}
}
}
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");
}
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();
}
Aggregations