尚未检测到更新。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.