diff --git a/server/src/ais.mjs b/server/src/ais.mjs index eeaa8c3..f49409a 100644 --- a/server/src/ais.mjs +++ b/server/src/ais.mjs @@ -15,7 +15,7 @@ const SENDER_TYPE = { function decodeMsgTypes(status_raw) { const types = []; for (let i = 0; i < 32; i++) { - if (status_raw & (1 << i)) types.push(i); // was i + 1 + if (status_raw & (1 << i)) types.push(i); } return types; } @@ -24,21 +24,26 @@ export async function getAIS() { const {ADSB_URL} = cfg(); if(!ADSB_URL) return {data: []}; const r = await fetch(`${ADSB_URL}:9990/api/ships_array.json`); - const j = await r.json(); + const {dynamic, static: staticRows} = await r.json(); - const {values} = j; - const boats = values.map(row => { + const staticMap = new Map(staticRows.map(row => [row[0], row])); + + const boats = dynamic.map(row => { const [ - mmsi, lat, lon, distance, bearing, rssi, count, drift, - unknown_bool, speed, heading, course, altitude, - destination, eta, dimension, receiver, sources, channels, - msg_type, msg_type2, status_raw, country, - ship_type, callsign, imo, draught, - unknown1, unknown2, unknown3, - name, name2, name3, - last_signal, count2, sender_type, channels2, unknown4, in_range + mmsi, lat, lon, distance, bearing, + speed, heading, course, + unknownA, rssi, drift, count, + channelsMaybe, unknown, unknownB, unknownC, receiver, sender, + unknownD, altitude, unknownE, unknownF, unknownG, country, + // Known missing: sender_type, last_signal, in_range, ] = row; + const s = staticMap.get(mmsi) ?? []; + const [ + _mmsi, name, name2, name3, + unknown1, unknown2, unknown3, unknown4, unknown5, unknown6, unknown7, unknown8, unknown9, unknown10, unknown11 + ] = s; + return { mmsi, type: SENDER_TYPE[sender_type], lat, lon, altitude,