尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
An interactive map of Vienna's U-Bahn and S-Bahn networks. It shows live
U-Bahn departure estimates and scheduled S-Bahn positions.
The Wiener Linien real-time interface publishes departure predictions, not
vehicle GPS coordinates. This app walks each prediction backwards along its
line's official station sequence and estimated segment timings. Train dots are
therefore position estimates, and the interface fades uncertain estimates.
When a line has no usable live prediction, hollow dashed dots show timetable
simulations so they cannot be mistaken for reported trains.檢視完整 README ↗Website: https://salarshk.github.io/vienna-ubahn-live-map/ Product overview: https://salarshk.github.io/vienna-ubahn-live-map/overview/
An interactive map of Vienna's U-Bahn and S-Bahn networks. It shows live U-Bahn departure estimates and scheduled S-Bahn positions.
The Wiener Linien real-time interface publishes departure predictions, not vehicle GPS coordinates. This app walks each prediction backwards along its line's official station sequence and estimated segment timings. Train dots are therefore position estimates, and the interface fades uncertain estimates. When a line has no usable live prediction, hollow dashed dots show timetable simulations so they cannot be mistaken for reported trains.
ÖBB's public feed does not provide S-Bahn vehicle GPS. S-Bahn dots are therefore interpolated between the station times in the official 2026 GTFS timetable and are always drawn hollow and labelled as scheduled estimates.
?mode=dashboardThe delay model can publish a clearly marked preliminary score after at least
36 hours spanning two calendar days and a sufficiently large untouched test
period. It is automatically promoted to validated status only after the
seven-day safeguards are met. Its methodology is documented in
docs/ml-delay-model.md.
The AI advisor is an optional, separately hosted secure service and is gated
off in the production build for now. The public website never contains an
OpenAI key and does not call the rail-data Worker for GPT requests. Its evidence
contract and safeguards are documented in
docs/llm-rail-advisor.md.
npm install
npm run dev
Open http://localhost:5173.
The hosted site is also an installable Progressive Web App. On Android/Chrome use the browser's install prompt; on iPhone/Safari choose Share → Add to Home Screen. The installed shell can reopen during a short network interruption, while live departures refresh when connectivity returns.
The map's My commute panel stores saved stations only in local browser storage. Follow me uses the phone's GPS only after the user starts it; it can be stopped at any time. Disruption notifications are also opt-in and are generated from the official service-message feed while the app is open or installed with notification support. A server-backed push system would require an additional subscription backend and is intentionally not enabled here.
npm test
npm run build
Pushes to main are automatically built and published through the Pages
workflow in .github/workflows/deploy-pages.yml. The hosted build routes its
read-only departure requests through the open-source corsproxy.nl relay
because the official endpoint does not provide browser CORS headers. The data
still comes directly from Wiener Linien and the relay receives only public
station identifiers.
The Cloudflare Worker saves a station-level Wiener Linien summary to R2 each minute, full observation snapshots every five minutes, and dated WienMobil Rad samples every five minutes. Public rail and bike history endpoints mark stale data rather than presenting it as live. A separate scheduled job publishes hourly reliability reports. GitHub Actions restores a recent training window from the long-term R2 archive, saves new observations before training, and publishes model and data-quality reports. Each completed model report also has a dated R2 copy. The map's live feed is separate from these archives.
Traffic-counter locations are public metadata, but measured road values and event records require provider access. Configure these Worker variables only when the corresponding licensed or public endpoint is available:
VIENNA_TRAFFIC_API_URL measured Vienna traffic-counter feed
EVIS_TRAFFIC_API_URL EVIS / ITS Vienna Region relay
VIENNA_EVENTS_API_URL Vienna event-record relay
Until configured, the Urban Mobility panel labels traffic as catalog-only and
events as not configured; its forecasts remain time-of-day baselines rather
than pretending to be measured traffic or attendance.
npm run build:vienna-data
That command downloads Wiener Linien's current Open Government Data files and
regenerates the compact line, station, identifier, color and segment-timing
files in src/data/.
To refresh the S-Bahn routes and timetable from ÖBB's annual GTFS feed:
npm run build:sbahn
The scheduled refresh-sbahn.yml workflow checks for a newer annual feed on
the first day of each month, verifies it, and commits the generated timetable
only when the source data changed. If the bundled calendar has expired, the app
withdraws S-Bahn movements rather than presenting stale scheduled positions.
This is an independent project and is not operated or endorsed by Wiener Linien. Live markers are inferred from arrivals and should not be treated as exact train locations.
This Vienna adaptation is based on JieGH's original vibe_VLCmetroMap project. The original Git history and Apache 2.0 license are preserved.
The locate button requests a high-accuracy device GPS fix, with a browser geolocation fallback for the PWA when the Capacitor bridge is unavailable. It compares that one fix against the station list in the browser. The coordinates are not sent to Wiener Linien or to an application server. A visible accuracy ring and freshness fade prevent an old or imprecise fix from looking exact. Continuous follow mode uses the same browser-local path and is explicitly stopped when the user hides the location or closes the page.
Code is licensed under Apache 2.0. Vienna open data is published under CC BY.