Files
weather-station/server/airtraffic.mjs
2026-06-22 00:20:37 -04:00

50 lines
1.4 KiB
JavaScript

import { cfg } from './config.mjs'
import { writeFile, readFile } from 'fs/promises'
import { existsSync } from 'fs'
import { resolve, dirname } from 'path'
import { fileURLToPath } from 'url'
const DIR = dirname(fileURLToPath(import.meta.url))
const SHAPES_PATH = resolve(DIR, 'public', 'aircraft.js')
export async function getShapes() {
if (existsSync(SHAPES_PATH)) {
return JSON.parse(await readFile(SHAPES_PATH, 'utf8'))
}
const r = await fetch('https://raw.githubusercontent.com/wiedehopf/tar1090/refs/heads/master/html/markers.js', {
headers: { 'User-Agent': 'Mozilla/5.0' }
})
const text = await r.text()
let shapes = {}
eval(text.replace('let shapes', 'shapes') + '; shapes = shapes;')
const fn = new Function(`${text.replace('let shapes', 'var shapes')}; return shapes;`)
shapes = fn()
await writeFile(SHAPES_PATH, JSON.stringify(shapes))
return shapes
}
export async function getAirTraffic() {
const { ADSB_URL } = cfg()
if (!ADSB_URL) return { data: [] }
const r = await fetch(`${ADSB_URL}/re-api/?all`)
const j = await r.json()
return { data: j.aircraft || [] }
}
export async function getAirTrafficHistory(icao) {
const { ADSB_URL } = cfg()
if (!ADSB_URL) return { history: [] }
const r = await fetch(`${ADSB_URL}/re-api/?trace&icao=${icao}`)
const j = await r.json()
const history = (j.trace || []).map(t => ({
latitude: t[1],
longitude: t[2],
altitude: t[3] || 0,
}))
return { history }
}