Search in sources :

Example 21 with Fix

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());
}
Also used : Fix(au.gov.amsa.risky.format.Fix) Test(org.junit.Test)

Example 22 with Fix

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());
}
Also used : Fix(au.gov.amsa.risky.format.Fix) Test(org.junit.Test)

Example 23 with Fix

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);
}
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 24 with Fix

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();
}
Also used : Fix(au.gov.amsa.risky.format.Fix) ByteArrayInputStream(java.io.ByteArrayInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) Test(org.junit.Test)

Example 25 with Fix

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();
}
Also used : Fix(au.gov.amsa.risky.format.Fix) ByteArrayInputStream(java.io.ByteArrayInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) Test(org.junit.Test)

Aggregations

Fix (au.gov.amsa.risky.format.Fix)48 Test (org.junit.Test)27 File (java.io.File)18 BinaryFixes (au.gov.amsa.risky.format.BinaryFixes)12 Observable (rx.Observable)12 IOException (java.io.IOException)11 List (java.util.List)10 FileOutputStream (java.io.FileOutputStream)9 Pattern (java.util.regex.Pattern)7 Schedulers (rx.schedulers.Schedulers)7 SegmentOptions (au.gov.amsa.geo.model.SegmentOptions)6 Shapefile (au.gov.amsa.gt.Shapefile)6 BinaryFixesFormat (au.gov.amsa.risky.format.BinaryFixesFormat)6 Files (au.gov.amsa.util.Files)6 InputStream (java.io.InputStream)6 TimeUnit (java.util.concurrent.TimeUnit)6 MmsiValidator2 (au.gov.amsa.util.identity.MmsiValidator2)5 BufferedOutputStream (java.io.BufferedOutputStream)5 ByteArrayInputStream (java.io.ByteArrayInputStream)5 OutputStream (java.io.OutputStream)5