Search in sources :

Example 1 with AisBStaticDataReportPartB

use of au.gov.amsa.ais.message.AisBStaticDataReportPartB in project risky by amsa-code.

the class ExtractStaticDataAsCsvFromNmeaGz method extractStaticData.

public static void extractStaticData(File input, File output) throws IOException {
    output.getParentFile().mkdirs();
    try (PrintStream out = new PrintStream(output)) {
        // 
        Streams.nmeaFromGzip(input).compose(// 
        o -> Streams.extractMessages(o)).filter(x -> // 
        (x.message() instanceof AisShipStatic) || // 
        (x.message() instanceof AisBStaticDataReportPartA) || // 
        (x.message() instanceof AisBStaticDataReportPartB)).groupBy(// 
        x -> ((HasMmsi) x.message()).getMmsi()).flatMap(o -> // 
        o.scan(// 
        new Timed<State>(new State(o.getKey(), null, null, null, null, null), 0L), (timed, x) -> {
            State state = timed.object;
            String name = state.name;
            String callsign = state.callsign;
            Integer imo = state.imo;
            Integer shipType = state.shipType;
            AisClass aisClass = state.aisClass;
            if (x.message() instanceof AisShipStaticA) {
                AisShipStaticA a = (AisShipStaticA) x.message();
                callsign = a.getCallsign();
                name = a.getName();
                imo = a.getImo().orElse(null);
                shipType = a.getShipType();
                aisClass = AisClass.A;
            } else if (x.message() instanceof AisPositionBExtended) {
                AisPositionBExtended a = (AisPositionBExtended) x.message();
                name = a.getName();
                shipType = a.getShipType();
                aisClass = AisClass.B;
            } else if (x.message() instanceof AisBStaticDataReportPartA) {
                AisBStaticDataReportPartA a = (AisBStaticDataReportPartA) x.message();
                if (a.getName().isPresent()) {
                    name = a.getName().get();
                }
                aisClass = AisClass.B;
            } else if (x.message() instanceof AisBStaticDataReportPartB) {
                aisClass = AisClass.B;
            }
            return new Timed<State>(new State(o.getKey(), aisClass, name, callsign, imo, shipType), x.time());
        }).skip(// 
        1).distinctUntilChanged(ts -> ts.object)).doOnNext(x -> {
            State y = x.object;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
            String line = // 
            y.mmsi + "," + sdf.format(new Date(x.time)) + // 
            "," + y.aisClass + // 
            "," + integer(y.imo) + // 
            "," + integer(y.shipType) + // 
            "," + string(y.name) + ",";
            out.println(line);
        }).subscribe();
    }
}
Also used : PrintStream(java.io.PrintStream) AisBStaticDataReportPartA(au.gov.amsa.ais.message.AisBStaticDataReportPartA) Date(java.util.Date) TimeZone(java.util.TimeZone) AisClass(au.gov.amsa.risky.format.AisClass) AisShipStatic(au.gov.amsa.ais.message.AisShipStatic) SimpleDateFormat(java.text.SimpleDateFormat) IOException(java.io.IOException) AisPositionBExtended(au.gov.amsa.ais.message.AisPositionBExtended) File(java.io.File) AisBStaticDataReportPartB(au.gov.amsa.ais.message.AisBStaticDataReportPartB) HasMmsi(au.gov.amsa.ais.HasMmsi) Streams(au.gov.amsa.ais.rx.Streams) AisShipStaticA(au.gov.amsa.ais.message.AisShipStaticA) PrintStream(java.io.PrintStream) AisPositionBExtended(au.gov.amsa.ais.message.AisPositionBExtended) Date(java.util.Date) HasMmsi(au.gov.amsa.ais.HasMmsi) AisShipStatic(au.gov.amsa.ais.message.AisShipStatic) AisClass(au.gov.amsa.risky.format.AisClass) AisBStaticDataReportPartA(au.gov.amsa.ais.message.AisBStaticDataReportPartA) AisBStaticDataReportPartB(au.gov.amsa.ais.message.AisBStaticDataReportPartB) AisShipStaticA(au.gov.amsa.ais.message.AisShipStaticA) SimpleDateFormat(java.text.SimpleDateFormat)

Aggregations

HasMmsi (au.gov.amsa.ais.HasMmsi)1 AisBStaticDataReportPartA (au.gov.amsa.ais.message.AisBStaticDataReportPartA)1 AisBStaticDataReportPartB (au.gov.amsa.ais.message.AisBStaticDataReportPartB)1 AisPositionBExtended (au.gov.amsa.ais.message.AisPositionBExtended)1 AisShipStatic (au.gov.amsa.ais.message.AisShipStatic)1 AisShipStaticA (au.gov.amsa.ais.message.AisShipStaticA)1 Streams (au.gov.amsa.ais.rx.Streams)1 AisClass (au.gov.amsa.risky.format.AisClass)1 File (java.io.File)1 IOException (java.io.IOException)1 PrintStream (java.io.PrintStream)1 SimpleDateFormat (java.text.SimpleDateFormat)1 Date (java.util.Date)1 TimeZone (java.util.TimeZone)1