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