尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Self-hosted ADS-B flight tracker PWA: RTL-SDR + readsb, dead-reckoned planes, to-scale silhouettes, faux-3D SEA/BFI/RNT airports
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A self-hosted ADS-B flight tracker for the skies above Renton, WA, built as an installable phone app. A $30 software-defined radio on a windowsill hears the aircraft overhead, and a small web app turns that into a live map with real aircraft silhouettes, airline logos, routes and a faux-3D view of SEA, Boeing Field and Renton airports.
Live: sky.spenc.ee (Add to Home Screen on a phone for the app). The public site is served through a Cloudflare tunnel from a filtered copy of the data that leaves out anything locating the receiver; see nginx.conf. This repo is the whole project.
1090 MHz +--------------------------- docker compose ---------------------------+
antenna --> RTL-SDR | ultrafeeder (readsb + tar1090) sky-api (stdlib Python, SQLite) |
| /data/aircraft.json /api/ac/<hex> lookups + log |
| traces, receiver.json /api/fill community gaps |
| \ / |
| +-----> sky-web (nginx) <--+ |
+----------------------------|---------------------------------------- +
v
web/ PWA (vanilla JS + Leaflet), service worker
sky-api looks aircraft up on adsbdb.com only when someone taps a plane, and tops up what the antenna cannot hear (parked and taxiing aircraft at SEA/BFI behind terrain, traffic beyond range) from adsb.fi, adsb.lol and airplanes.live. Those feeds are read-only; nothing from the receiver is sent to them.
Dead reckoning. The receiver reports a position about once a second per aircraft. Between fixes the app advances each marker along its track at its ground speed on every animation frame, then blends any disagreement with the next real fix in over a short window, so planes glide instead of jumping.
Route trust. Callsign-to-route databases are wrong often, because one flight number flies several legs per day. sky-api computes the cross-track distance from the aircraft to the origin-destination great circle and marks the route "trusted" only within ROUTE_SLACK_NM (120 nm). Untrusted routes are not shown.
Silhouettes. tools/build_shapes.py crops and normalizes the outlines in shapes-src/ (one common scale, about 1 unit per meter) into web/shapes/, with an index of sizes, type aliases and ADS-B emitter-category fallbacks. The app scales each icon by real aircraft size, and at airport zoom draws it at true size.
Faux-3D buildings. tools/build_airports.py pulls aerodrome features from Overpass and writes a compact web/airports.json (coordinates rounded to about 1 m). The app draws buildings as extruded footprints with a shifted roof layer and shadow, with the walls shaded by facing. Detail arrives with zoom: runways always, taxiways, then buildings.
Service worker. web/sw.js precaches the app shell (versioned, so a release replaces the old cache) and keeps a size-capped cache of map tiles. Live data (/data/, /api/) always goes to the network.
.env next to docker-compose.yml (see .env.example):
LAT=47.48
LON=-122.21
Use your real receiver location here; it stays on your machine (.env is git-ignored). The app also reads it at runtime from receiver.json.docker compose up -d, then open http://<host>:8504/. The stock tar1090 UI is at /classic/.~/adsb on a server: SKY_HOST=user@host ./deploy.sh.python3 tools/build_airports.py (stdlib only) and python3 tools/build_shapes.py (needs cairosvg and Pillow).Sightings are stored in state/sky.db (SQLite).
web/airports.jsonweb/vendor/leaflet/GPL-3.0, see LICENSE. The aircraft silhouettes are derived from GPL-3.0 work, which sets the license for the whole repo.