MooveFree is an open-source public transportation route planner for Israel, built with Python and modern web technologies. It provides an intuitive interface for finding optimal bus routes between any two stops in the Israeli public transportation network.
The application uses GTFS (General Transit Feed Specification) data to build a graph representation of the transportation network, allowing for route planning and visualization. The project aims to provide a free and accessible alternative to commercial route planning services, with a focus on user-friendly design and performance.
Stops map demo available at https://dorpascal.com/MooveFree/
Navigation demo available at https://dorpascal.com/MooveFree/map
Note that the application is still under development and some features may not be fully functional.
- Interactive map-based interface
- Real-time route planning
- Support for the complete Israeli public transportation network
- Stop search with auto-suggestions
- Visualization of routes and stops
- Multiple route alternatives
- RTL support for Hebrew
Currently in development with some features under construction:
- Graph building optimization
- Path finding between routes and destinations
- Basic map visualization
- Stop search functionality
- Route display
Click to expand
The GTFS Trip Planner calculates optimal journeys between public transit stops. Here's a summary of how it works:
-
Data Loading:
- Loads GTFS datasets (
stops
,routes
,trips
,stop_times
) and caches them. - Builds a graph where nodes are stops and edges are transit or walking connections.
- Loads GTFS datasets (
-
Network Construction:
- Creates connections between stops using transit schedules.
- Adds walking connections based on proximity (calculated using the Haversine formula).
-
Journey Planning:
- Finds shortest paths between start and destination stops using
networkx
. - For each path, selects the best trips (transit or walking) based on departure and arrival times.
- Finds shortest paths between start and destination stops using
-
Trip Optimization:
- Prioritizes trips with minimal travel and wait times.
- Supports walking trips when transit options are unavailable.
-
Output:
- Returns a list of optimized journeys with details on total travel time and walking distance.
The current implemntation is not yet functional and requires further testing and optimization. Future updates will focus on improving path finding performance and accuracy.
Visualization of sample of the cached network:
Visualization of the network on a map:
Output from the current implementation:
Click to expand
Starting GTFS Processing Example...
Loading GTFS data...
No cached network found, building network...
Building transit network...
Creating route catalog lookup...
Creating trip-route lookup...
Processing stop_times...
100%|โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ| 24222018/24222018 [01:02<00:00, 387942.48it/s]
Adding walking connections...
Analyzing walking connections...
Added 1235484 walking connections
Network statistics:
- Nodes (stops): 34,405
- Edges (connections): 629,479
- Routes: 7,061
- Direct connections: 1,258,943
Caching network for future use...
โ Network cached successfully
Finding frequently served stops...
Busiest stops:
Stop 13103 (ืงื ืืื ืขืืจืืืื/ืืจื ืื ืื ืืืื): served by 372 routes
Stop 13322 (ืืืกืืจ/ืืืืืื): served by 309 routes
Stop 13358 (ืกืืื ืจ ืืงืืืืฆืื/ืืจื ื ืืืจ): served by 269 routes
Stop 12898 (ืช.ืจืง''ื ืืืจืื ืืืืฅ'/ืืจื ื'ืืืืื ืกืงื): served by 259 routes
Stop 13120 (ืืจื ืืื ื'ืืืืื ืกืงื/ืืืื ืืืจ): served by 249 routes
Stop 14045 (ืืืื ืื''ืฉ/ืจืื ื ืชื): served by 240 routes
Stop 13345 (ืืืื ืื''ืฉ/ืจืื ืขืงืืื): served by 239 routes
Stop 12910 (ืืจื ื ืืืจ/ืืืืื ืืืืื): served by 231 routes
Stop 29432 (ืจืื ืขืงืืื/ืื ืืจืฉื): served by 231 routes
Stop 14043 (ืืืื ืื''ืฉ/ืืืืื''ืจ ืืืืจ): served by 230 routes
Searching for journeys...
Finding paths from 14043 to 13103 starting at 08:00:00
From: ืืืื ืื''ืฉ/ืืืืื''ืจ ืืืืจ to ืงื ืืื ืขืืจืืืื/ืืจื ืื ืื ืืืื
Found 31 possible paths
Analyzing path 1/31:
Stops: 14043 (ืืืื ืื''ืฉ/ืืืืื''ืจ ืืืืจ) -> 13338 (ืืืื ืื''ืฉ/ืืจื ืืขืงื ืื ืื) -> 15989 (ืฆืืืช ื ืืจ ืืืื) -> 15988 (ืฆืืืช ื ืืื ืืจืฆืื) -> 38936 (ืงื ืืื ืขืืจืืืื/ืืืืฉ 20) -> 13103 (ืงื ืืื ืขืืจืืืื/ืืจื ืื ืื ืืืื)
Finding connection from ืืืื ืื''ืฉ/ืืืืื''ืจ ืืืืจ to ืืืื ืื''ืฉ/ืืจื ืืขืงื ืื ืื after 08:00:00
Found 54 possible routes: 16072, 35812, 2429, 33267, 35995, 10549, 6616, 10531, 10535, 17011, 35707, 17845, 33268, 10526, 16907, 11597, 19577, 8657, 8656, 35708, 2428, 11625, 16203, 6642, 11623, 16073, 15521, 8663, walking, 6588, 11598, 17007, 37655, 35822, 17226, 6610, 17155, 10525, 10532, 6601, 17154, 16909, 28403, 33269, 13668, 35693, 10536, 28402, 16908, 15035, 35696, 8665, 16204, 15522
Walking option available: 08:00:00 -> 08:04:00
Searching for trips from 14043 to 13338 after 08:00:00
Looking at routes: {'16072', '35812', '2429', '33267', '35995', '10549', '6616', '10531', '10535', '17011', '35707', '17845', '33268', '10526', '16907', '11597', '19577', '8657', '8656', '35708', '2428', '11625', '16203', '6642', '11623', '16073', '15521', '8663', '6588', '11598', '17007', '37655', '35822', '17226', '6610', '17155', '10525', '10532', '28403', '17154', '16909', '33269', '6601', '13668', '35693', '10536', '28402', '16908', '15035', '35696', '8665', '16204', '15522'}
Found 8594 departures and 5967 arrivals
Found 4292 common trips between these stops
Found 1893 trips on requested routes
Trip 3016104_231224: Departs at 09:09:13, time diff from 08:00:00 is 69 minutes
Found better trip: Route 2428, 09:09:13 -> 09:10:08
...
- Python 3.8+
- Pandas & GeoPandas
- Leaflet.js
- HTML5/CSS3
- GTFS (General Transit Feed Specification)
-
Clone the repository
git clone https://github.com/Dor-sketch/MooveFree.git cd MooveFree
-
Create and activate virtual environment (optional but recommended)
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate
-
Install dependencies
pip install -r requirements.txt
-
Download GTFS data
# Create directory for GTFS data mkdir israel-public-transportation # Download and extract GTFS files into the directory
You can find GTFS data for download at the Israeli Ministry of Transportation website.
-
Run the application
python -m http.server 8000
Visit
http://localhost:8000
in your web browser.
- Enter your starting point in the "ืชืื ืช ืืืฆื" field
- Enter your destination in the "ืชืื ืช ืืขื" field
- Click "ืืคืฉ ืืกืืื" to find available routes
- View the suggested routes on the map and in the results panel
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Israeli Ministry of Transportation for providing GTFS data
- OpenStreetMap contributors
- The GTFS community
Dor Pascal - @Dor-sketch | LinkedIn | dorpascal.com
Project Link: https://github.com/Dor-sketch/MooveFree