尚未偵測到更新。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.