https://github.com/weareblahs/bus
React-based bus tracking web app for rapidPenang, rapidKL and rapidPahang in Malaysia (in development)
https://github.com/weareblahs/bus
bus-tracking gtfs-feed gtfs-realtime gtfs-static public-transportation react-js
Last synced: about 1 month ago
JSON representation
React-based bus tracking web app for rapidPenang, rapidKL and rapidPahang in Malaysia (in development)
- Host: GitHub
- URL: https://github.com/weareblahs/bus
- Owner: weareblahs
- Created: 2024-12-05T06:16:35.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-04-14T02:09:45.000Z (about 1 month ago)
- Last Synced: 2025-04-14T03:24:40.174Z (about 1 month ago)
- Topics: bus-tracking, gtfs-feed, gtfs-realtime, gtfs-static, public-transportation, react-js
- Language: JavaScript
- Homepage: https://b.ntyx.dev
- Size: 35.1 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# bus?
...yes, that is the project name. Keep it simple. It's originally called "Is there any bus for this route near me?" but it's too long.
# What's this?
This is a simple-to-use bus tracker that utilizes the GTFS realtime feed from the open data by Malaysian Government, which is then used to track buses. Data is provided by Prasarana via data.gov.my.
# Status
| Provider | Data source | Status | Remarks |
| ----------------- | ----------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------- |
| rapidPenang | `data.gov.my` GTFS-Realtime data (Direct) | Available (static only) | Station stop data is inaccurate due to stop estimation between current coordinates and static station data |
| rapidKL | `data.gov.my` GTFS-Realtime data (Direct) | Available | Station stop data is inaccurate due to stop estimation between current coordinates and static station data |
| rapidKuantan | `data.gov.my` GTFS-Realtime data (Direct) | Available (static only) | Station stop data is inaccurate due to stop estimation between current coordinates and static station data |
| myBAS Johor Bahru | `data.gov.my` | Planned | |### What does "Direct" mean?
"Direct" means that this web app will fetch the available API endpoints on `data.gov.my` instead of relying on external APIs.
# Issues
- Global: Station info inaccurate for some stations (previous, current, next). Please see myRapid PULSE app for accurate info. Location data is accurate.
- Known ones include: rapidPenang (for mainland and loop). Please do help me confirm about accuracy of rapidKL and rapidKuantan data.
- Global: Some data shows "unknown location" for all 3 station placeholders. This is due to some bugs on the `getNearest` code.
- Global: If the array is blank (no data), nothing will be shown except for "Bus info". There will be a placeholder soon.
- Global: Searching for loop routes will result in `getNearest` counting the first appearance of the station instead of the second appearance.
- rapidPenang and rapidKuantan: No realtime data available through this web app due to parsing reasons. Refer to myRapid PULSE for realtime bus data for these providers.
- Global: Unable to parse days through static data, which I do not understand how trip IDs work in this case
- Global: Search for static data does not work# Disclaimer
Do note that the data here is not completely accurate - it is recommended to check for myRapid PULSE (dynamic) or Google Maps (static) for more accurate info for bus arrival times.
# About station data
Station names (including route names) are stored as a static JSON file under the `data/stnInfo` directory, while the file names being `[PROVIDER]_[ROUTE_NUMBER][DIRECTION].json`. For the direction:
- `A` is the forward position. (example: `301A` directs to `JETI - RELAU` in rapidPenang)
- `B` is the reverse position. (example: `301B` directs to `RELAU - JETI` in rapidPenang)Data includes:
- Station name is stored under `stop_name`.
- Latitude and Longitude of the station are stored respectively under `stop_lat` and `stop_long`.
- Stop ID are stored under `stop_id`.
- Station sequence are stored under `stop_sequence`.
These data are originally from the open data mentioned as a GTFS data ZIP file (converted to JSON from CSV and removed duplicate entries for easy conversion).See [here](https://github.com/weareblahs/bus/blob/main/docs/StaticData.md) for more information on the structure for static data.
# Other plans for this project
- Crowdsourced bus information (including bus type and others)
- Crowdsources bus status, which user can report if the bus gets delayed and other info
- Pin favorite bus routes so it will appear when web app launched
- Framework-based app for Android
- Geolocation, which requires an large update on route data
- Reverse searching (search for station instead of routes), which (also) requires an large update on route data# Where can I see this project?
Currently in beta - which can be accessed via [https://b.ntyx.dev](https://b.ntyx.dev). Alternatively, you can also access the web app via [https://bqm.vercel.app](https://bqm.vercel.app).
Do note that a new version of bus? is coming soon, which a preview of it can be seen on [https://bqmv2.vercel.app](https://bqmv2.vercel.app).
# Credits
- Data sourced from `data.gov.my` (see documentation [here](https://developer.data.gov.my/realtime-api/gtfs-static))
- Icons sourced from Font Awesome's icon library via react-icons
- `getNearest` algorithm from `https://www.geodatasource.com`, which the original license statement can be found on the `distance` function under `/src/appComponents/getNearest.jsx`.