use of au.gov.amsa.risky.format.Fix in project risky by amsa-code.
the class DriftDetectorTest method testRule6DrifterNonDrifterDrifterOverNonDriftingThreshold.
@Test
public void testRule6DrifterNonDrifterDrifterOverNonDriftingThreshold() {
long t = 0;
// drifter
Fix f1 = createFix(90, DRIFT_SPEED_KNOTS, t);
// non-drifter
Fix f2 = createFix(1, DRIFT_SPEED_KNOTS, t += 1);
// drifter
Fix f3 = createFix(91, DRIFT_SPEED_KNOTS, t += testOptions.nonDriftingThresholdMs() + 1);
List<DriftCandidate> list = getCandidates(Observable.just(f1, f2, f3));
assertTrue(list.isEmpty());
}
use of au.gov.amsa.risky.format.Fix in project risky by amsa-code.
the class DriftDetectorTest method testStartingWithNonDriftersDoesNothing.
@Test
public void testStartingWithNonDriftersDoesNothing() {
long t = 0;
// non-drifter
Fix f1 = createFix(0, DRIFT_SPEED_KNOTS, t);
// non-drifter
Fix f2 = createFix(1, DRIFT_SPEED_KNOTS, t += 1);
// non-drifter
Fix f3 = createFix(1, DRIFT_SPEED_KNOTS, t += 1);
List<DriftCandidate> list = getCandidates(Observable.just(f1, f2, f3));
assertTrue(list.isEmpty());
}
use of au.gov.amsa.risky.format.Fix 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);
}
use of au.gov.amsa.risky.format.Fix in project risky by amsa-code.
the class StreamsTest method testExtractFixGetsNavigationalStatusOfUnderWay.
@Test
public void testExtractFixGetsNavigationalStatusOfUnderWay() throws IOException {
InputStream is = new ByteArrayInputStream("\\s:Pt Hedland NOMAD,c:1421878430*19\\!ABVDM,1,1,,B,33m2SV800K`Nh85lJdeDlTCN0000,0*1A".getBytes(Charset.forName("UTF-8")));
Fix fix = Streams.extractFixes(Streams.nmeaFrom(is)).toBlocking().single();
assertEquals(NavigationalStatus.UNDER_WAY, fix.navigationalStatus().get());
is.close();
}
use of au.gov.amsa.risky.format.Fix in project risky by amsa-code.
the class StreamsTest method testExtractFixFromAisPositionA.
@Test
public void testExtractFixFromAisPositionA() throws IOException {
InputStream is = new ByteArrayInputStream("\\s:rEV02,c:1334337317*58\\!AIVDM,1,1,,B,19NWuLhuRb5QHfCpPcwj`26B0<02,0*5F".getBytes(Charset.forName("UTF-8")));
Fix fix = Streams.extractFixes(Streams.nmeaFrom(is)).toBlocking().single();
assertEquals(636091763, fix.mmsi());
assertEquals(-13.0884285, fix.lat(), PRECISION);
assertEquals(1334337317000L, fix.time());
assertEquals(AisClass.A, fix.aisClass());
assertEquals(67.0, fix.headingDegrees().get(), PRECISION);
assertEquals(67.199996948, fix.courseOverGroundDegrees().get(), PRECISION);
assertFalse(fix.latencySeconds().isPresent());
assertEquals(1, (int) fix.source().get());
System.out.println(fix);
is.close();
}
Aggregations