Store your GPX tracks of your running (or other sports activity) in django.
Project description
Store your GPX tracks of your running (or other sports activity) in django.
The name Django-ForRunners has the origin from the great Android tracking app ForRunners by Benoît Hervier: http://rvier.fr/#forrunners
Features:
GPX track management:
Upload GPX tracks
Import GPX tracks from commandline
Track analysis:
basics: Track length / Duration / Pace / Hart rate Up-/Downhill
Display route on OpenStreetMap map
Graphs with elevation / heart rate / cadence (if available in GPX data)
Data that is automatically extracted from the web:
Start/finish Address from OpenStreetMap
Start/finish weather information from metaweather.com
Store additional data:
Ideal track distance (for easier grouping/filtering tracks)
sports competitions Management:
Create a List of Sport Events
Add participation to a event
link GPX track with a event participation
Store you event participation:
official track length
measured finisher time
Number of participants who have finished in your discipline
Add links to webpages relatet to this event
Record costs (entry fee, T-shirt etc.)
common
Multiple user support (However: no rights management and currently only suitable for a handful of users)
Screenshots
(All screenshots are here: github.com/jedie/jedie.github.io/tree/master/screenshots/django-for-runners)
for-runers v0.6.0 2018-07-31 GPX Track.png
for-runners v0.4.0 2018-6-26 GPX info.png
for-runners v0.6.0 2018-07-19 Event Costs.png
try-out
e.g.:
# create a python virtualenv: ~$ python3 -Im venv DjangoForRunnersEnv # activate the created virtualenv: ~$ cd DjangoForRunnersEnv/ ~/DjangoForRunnersEnv$ source bin/activate # Upgrade pip: (DjangoForRunnersEnv) ~/DjangoForRunnersEnv$ pip3 install --upgrade pip # install django-for-runners: (DjangoForRunnersEnv) ~/DjangoForRunnersEnv$ pip3 install git+https://github.com/jedie/django-for-runners.git@egg=django-for-runners # install dependencies: (DjangoForRunnersEnv) ~/DjangoForRunnersEnv$ cd src/django-for-runners/ (DjangoForRunnersEnv) ~/DjangoForRunnersEnv/src/django-for-runners$ pip install -r requirements.txt # create base data: (DjangoForRunnersEnv) ~/DjangoForRunnersEnv/src/django-for-runners$ ./manage.py fill_basedata
start the development server with the test project, e.g.:
# activate the virtualenv: ~$ cd DjangoForRunnersEnv/ ~/DjangoForRunnersEnv$ source bin/activate # start server: (DjangoForRunnersEnv) ~/DjangoForRunnersEnv$ cd src/django-for-runners/ (DjangoForRunnersEnv) ~/DjangoForRunnersEnv/src/django-for-runners$ ./run_test_project_dev_server.sh
import GPX files, e.g.:
# activate the virtualenv: ~$ cd DjangoForRunnersEnv/ ~/DjangoForRunnersEnv$ source bin/activate # import: (DjangoForRunnersEnv) ~/DjangoForRunnersEnv$ cd src/django-for-runners/ (DjangoForRunnersEnv) ~/DjangoForRunnersEnv/src/django-for-runners$ ./manage.py import_gpx --username <username> ~/backups/gpx_files
Note: It is no problem to start import_gpx with the same GPX files: Duplicate entries are avoided. The start/finish (time/latitude/longitude) are compared.
run tests
# activate the virtualenv: ~$ cd DjangoForRunnersEnv/ ~/DjangoForRunnersEnv$ source bin/activate # run the tests: (DjangoForRunnersEnv) ~/DjangoForRunnersEnv$ cd src/django-for-runners/ (DjangoForRunnersEnv) ~/DjangoForRunnersEnv/src/django-for-runners$ ./setup.py test # run text via tox: (DjangoForRunnersEnv) ~/DjangoForRunnersEnv/src/django-for-runners$ ./setup.py tox
Note:
To run all tests, you need:
Chromium Browser WebDriver e.g.: apt install chromium-chromedriver
Firefox Browser WebDriver aka geckodriver
install geckodriver e.g.:
~$ cd /tmp /tmp$ wget https://github.com/mozilla/geckodriver/releases/download/v0.20.1/geckodriver-v0.20.1-linux64.tar.gz -O geckodriver.tar.gz /tmp$ sudo sh -c 'tar -x geckodriver -zf geckodriver.tar.gz -O > /usr/bin/geckodriver' /tmp$ sudo chmod +x /usr/bin/geckodriver /tmp$ rm geckodriver.tar.gz /tmp$ geckodriver --version geckodriver 0.20.1 ...
some notes
GPX storage
Currently we store the unchanged GPX data in a TextField.
static files
We collect some JavaScript files, for easier startup. These files are:
Project Homepage |
License |
storage directory |
---|---|---|
Precision of coordinates
GPX files from Garmin (can) contain:
latitude with 29 decimal places
longitude with 28 decimal places
elevation with 19 decimal places
The route on OpenStreetMap does not look more detailed, with more than 5 decimal places.
See also: https://wiki.openstreetmap.org/wiki/Precision_of_coordinates
Django compatibility
django-for-runners |
django version |
python |
---|---|---|
>=v0.7.1 |
2.1 |
3.5, 3.6, 3.7 |
v0.5.x |
2.0 |
3.5, 3.6, 3.7 |
(See also combinations in .travis.yml and tox.ini)
history
-
TBD
-
Update to Django 2.1
Bugfix Tests
-
Use dygraphs in GPX Track change admin view
Sync mouse over from Elevation/Headrate/Cadence dygraphs to leaflet open streep map
Fix “try-out” section in README (Thanks adsworth for reporting
Add links from gpx tracks to other admin change view
Bugfixes
internals:
refactor stuff around track duration/length
move manipluation of list_display and list_filter contributed by adsworth
-
NEW: event participation
NEW: costs of event participation (e.g.: entry fee for the competition, cost of a T-Shirt etc.)
NEW: Display statistics of events/costs per user and total
-
remove Django-CMS
update to Django v2.0
NOTE: The migrations are simply replaced! So you must delete your database, e.g.: src/django-for-runners$ rm test_project_db.sqlite3
Add ‘net duration’ field, for the officially measured time and use it for calculations if available.
Create django manage command to fill some base data: $ ./manage.py fill_basedata
speedup by deactivating some django debug toolbar panels
-
combine track filters with statistic views
NEW: GPX info (See length, point count and Average distance in meters between the points)
NEW: Display GPX metadata
Add ‘creator’ to every track and use it as changelist filter
remove Streetmap image generated via geotiler
Speedup by using a cache for gpxpy instances
-
Start adding statistics (See screenshot above)
add weather information from metaweather.com to every track
-
Display elevations, heart_rates and cadence_values if available
Add kilometer markers to OpenStreetMap
-
a few bugfixes
-
Render interactive OpenStreetMap track map with Leaflet JS
-
Better Events model
GPX error handling
more tests
Bugfix for Python 3.5 (Geotiler needs Python 3.6 or later)
-
display min/average/max heart rate
use autotask to generate the MAP in background
-
generate SVG ‘icon’ from GPX track
v0.0.1 - 30.05.2018
Just create a pre-alpha release to save the PyPi package name ;)
links
Homepage |
|
PyPi |
alternatives (OpenSource only)
https://github.com/pytrainer/pytrainer (Desktop Program)
https://github.com/GoldenCheetah/GoldenCheetah/ (Desktop Program)
Online tools:
credits
The whole thing is based on many excellent projects. Especially the following:
gpxpy GPX file parser
Leaflet JS A JS library for interactive maps used to render the track on OpenStreetMap
dygraphs open source JavaScript charting library
Chart.js HTML5 Charts
geopy Get geo location names of the GPX track start/end point
matplotlib plotting 2D graphics
autotask schedule background jobs
svgwrite Generating SVG file
donation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for django_for_runners-0.7.1-py3.6.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | b254f5a27d90cca1fb441cca60b9369447c2eb1a3939eaa7367a2c6bdd1aee01 |
|
MD5 | 4a61e6baea224cf54bf3587d2ba3cc57 |
|
BLAKE2b-256 | 8f26d4c153f7f93e554d7178dea3deeadc23a1e48501e155bea44d18730c1a87 |
Hashes for django_for_runners-0.7.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 54ea0ca67e7626243935fb4b8c5fc7c56337532e67defdd55ed94438bfcf3a6c |
|
MD5 | 701289f6ac73668be2432ac52a6920ef |
|
BLAKE2b-256 | b1d331926c07a49ef3d64a67e4d85ae2078c091351f34cf660ad16a2f8d36313 |