Bike GPS is an Open-Source Mobile Cross-Platform Bike Navigation System for iOS and Android, developed using Dart and Flutter.
It is powered by OpenStreetMap, Flutter Mapbox GL, OpenMapTiles, and Openrouteservice.
The app uses OpenStreetMap data served from a tile server to display its map.
The app includes functionality to navigate using tour files, as well as to the tours on-the-fly with routing based on the OSM map data.
The app includes a parser for .gpx files and is specifically made to allow for easy addition of further parsers for other file types.
The app will automatically generate navigation and turn information for the free navigation and for tour files that do not include such data.
Upon selecting a tour, the app will automatically display alternative tours, which can be switched to by simply tapping them on the map.
The road book features height information for all tours, as well as surface information for all parts of the tour for tour files including that data. The road book also displays all turns of the tour, with a description of the location and a textual explanation of the turn.
The app supports "Open with..." and "Share" functionality on mobile devices for tour files, as well as zip collections of tour files.
-
Install the Flutter SDK version 2.0.0 from the stable channel
-
See the official Flutter documentation for setup guidance
-
Clone the repository:
git clone https://github.com/patrick-mahnkopf/bike-gps.git
- Download the dependency packages with:
flutter pub get
- This project uses Flutter Mapbox GL, so the tiles have to be served either by mapbox, or by setting up a service such as OpenMapTiles on a server
- You can use something like OSM Bright as a starting point for the maps
- For the free navigation and tour enhancement features a route server has to be set up. You can use Openrouteservice for that
- A few tokens are expected in separate files in the
./assets/tokens
directory. Make sure that the folder stays listed in the .gitignore to prevent uploading any sensitive data - You will need the following:
- A
vector_style_string.txt
containing the URI of the tile server endpoint holding the vectorstyle.json
- A
raster_style_string.txt
containing the URI of the raster style JSON pointing to the tile server's raster endpoint - A
mapbox_access_token.txt
containing your private Mapbox access token to allow Flutter Mapbox GL to download the underlying Android/iOS SDKs - A
route_service_url.txt
containing the URI of the route server endpoint. Use the/ors/v2/directions/cycling-mountain/gpx
endpoint when running Openrouteservice - A
route_service_status_url.txt
containing the URI of the route server's status endpoint. Use the/ors/v2/health
endpoint when running Openrouteservice - A
log_server_values.txt
containing the URI of a log server endpoint, the username, and the password for that server, each in a separate line
- A