尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗An Android app that labels the planes in the sky on the camera image: a box around each plane with the airline, flight number, aircraft type, distance and altitude, from live ADS-B data. It reuses the camera, compass and projection code of Sun Path.
Web demo (simulated traffic): https://vvlad12.github.io/flightspot/?demo
alt_geom, same reference as the phone's
GPS) when the plane sends it, else pressure altitude.In demo mode (simulated traffic), the boxes are drawn from fake reports that are 1–9 s late, and the real positions are drawn as small dark planes with contrails. If the boxes sit on the planes, the prediction works. On straight paths the error is a few metres; in turns it grows (the circling Cessna is off by about 50–100 m).
Positions come from adsb.lol, a free community ADS-B network (data under the
ODbL licence, credited in the app). adsb.lol doesn't send CORS headers, so a web page may not
read its answers, and proxies on Cloudflare are refused by every free feed (adsb.lol 429,
adsb.fi 403, OpenSky timeouts). In the Android app, fetch() goes through Android's own HTTP
client (Capacitor's CapacitorHttp), which has no CORS rule: the phone calls adsb.lol directly,
from its own connection.
node serve.mjs passes /adsb/... through to adsb.lol, so live data can
be tested in a desktop browser.The same index.html, css/ and js/ run in all three. Per hour of use the app makes about
720 requests (one every 5 s) and downloads roughly 5–20 MB, only while it is open. Callsigns of
planes in view are sent to adsbdb.com to look up routes (cached for 6 h). If adsb.lol
answers 429 (rate-limited), the app waits 15 s and tries again.
android/app/build/outputs/apk/debug/app-debug.apk to the phone (USB, Drive, email…)
and open it. Android asks to allow installing apps from that source the first time.Open ?demo (or tap Demo): Zürich city, looking north to the airport, with simulated
arrivals, departures, overflights and a circling Cessna. Drag or use the arrow keys to look
around. On the local dev server, Settings → Source → Live ADS-B feed shows the real traffic
around Zürich in the same view.
The web app is plain HTML, CSS and ES modules, no build step. The Android app is a Capacitor 6 wrapper around the same files (Capacitor 6 because it builds with JDK 17).
npm install # Capacitor, once
npm test # geometry, feed parsing, prediction, simulator (Node 18+)
node serve.mjs # http://localhost:8001, with the /adsb passthrough
npm run android:apk # copy the web app to www/, sync, build the debug APK
npm run android:sync then opening android/ in Android Studio also works (Run ▶ installs on a
connected phone). Needs JDK 17 and the Android SDK (platform 35); android/local.properties
points to the SDK and isn't committed. node scripts/make-icons.mjs redraws the web and launcher
icons.
When you change any file, bump VERSION in sw.js and js/app.js so installed web copies update.
| File | Purpose |
|---|---|
js/projection.js | Camera model (copied from Sun Path, keep in sync) |
js/sensors.js | Camera, orientation, GPS (copied from Sun Path, plus watchLocation with altitude) |
js/solar.js | Sun position, for sun calibration (copied from Sun Path) |
js/geo.js | WGS84 → ECEF → ENU, look angles, dead reckoning |
js/feed.js | Feed parsing (readsb JSON), polling, prediction and smoothing, ground filter |
js/gps.js | Averages GPS fixes into a steadier position, settling / stable status |
js/routes.js | Origin and destination from adsbdb.com, cached, checked against the plane's position |
js/airlines.js | Callsign → airline (ICAO code table), aircraft types and wingspans |
js/sim.js | Simulated traffic around Zürich for demo mode |
js/render.js | Boxes, labels, edge arrows, demo sky scene |
js/app.js | UI, settings, calibration, picks the feed (native / dev server / none) |
android/ | Capacitor Android project (permissions: camera, location, internet) |
android/.../OrientationPlugin.java | Phone orientation from Android's rotation vector sensor |
capacitor.config.json | App id ch.dxan.flightspot, native HTTP on |
scripts/build-www.mjs | Copies the web app into www/ for Capacitor |
scripts/make-icons.mjs | Draws the web and Android icons |
serve.mjs | Local static server with the /adsb passthrough |
ABC 123.