export function makeMmsiPairHighlightExpr(aField: string, bField: string, hoveredMmsiList: number[]) { if (!Array.isArray(hoveredMmsiList) || hoveredMmsiList.length < 2) { return false; } const inA = ['in', ['to-number', ['get', aField]], ['literal', hoveredMmsiList]] as unknown[]; const inB = ['in', ['to-number', ['get', bField]], ['literal', hoveredMmsiList]] as unknown[]; return ['all', inA, inB] as unknown[]; } export function makeMmsiAnyEndpointExpr(aField: string, bField: string, hoveredMmsiList: number[]) { if (!Array.isArray(hoveredMmsiList) || hoveredMmsiList.length === 0) { return false; } const literal = ['literal', hoveredMmsiList] as unknown[]; return [ 'any', ['in', ['to-number', ['get', aField]], literal], ['in', ['to-number', ['get', bField]], literal], ] as unknown[]; } export function makeFleetOwnerMatchExpr(hoveredOwnerKeys: string[]) { if (!Array.isArray(hoveredOwnerKeys) || hoveredOwnerKeys.length === 0) { return false; } const expr = ['match', ['to-string', ['coalesce', ['get', 'ownerKey'], '']]] as unknown[]; for (const ownerKey of hoveredOwnerKeys) { expr.push(String(ownerKey), true); } expr.push(false); return expr; } export function makeFleetMemberMatchExpr(hoveredFleetMmsiList: number[]) { if (!Array.isArray(hoveredFleetMmsiList) || hoveredFleetMmsiList.length === 0) { return false; } const clauses = hoveredFleetMmsiList.map((mmsi) => ['in', mmsi, ['coalesce', ['get', 'vesselMmsis'], ['literal', []]]] as unknown[], ); return ['any', ...clauses] as unknown[]; } export function makeGlobeCircleRadiusExpr() { const base3 = 4; const base7 = 6; const base10 = 8; const base14 = 12; const base18 = 32; return [ 'interpolate', ['linear'], ['zoom'], 3, ['case', ['==', ['get', 'selected'], 1], 4.6, ['==', ['get', 'highlighted'], 1], 4.2, base3], 7, ['case', ['==', ['get', 'selected'], 1], 6.8, ['==', ['get', 'highlighted'], 1], 6.2, base7], 10, ['case', ['==', ['get', 'selected'], 1], 9.0, ['==', ['get', 'highlighted'], 1], 8.2, base10], 14, ['case', ['==', ['get', 'selected'], 1], 13.5, ['==', ['get', 'highlighted'], 1], 12.6, base14], 18, ['case', ['==', ['get', 'selected'], 1], 36, ['==', ['get', 'highlighted'], 1], 34, base18], ]; } export const GLOBE_SHIP_CIRCLE_RADIUS_EXPR = makeGlobeCircleRadiusExpr() as never;