bicycle_statistics: Update pages differentially
Signed-off-by: Thomas Klaehn <thomas.klaehn@u-blox.com>
This commit is contained in:
@@ -5,6 +5,7 @@ import gpxpy
|
||||
import gpxpy.gpx
|
||||
from geopy import distance
|
||||
from geopy import Point
|
||||
import pandas as pd
|
||||
|
||||
class Segment(object):
|
||||
start_time = None
|
||||
@@ -19,8 +20,7 @@ class Track(object):
|
||||
duration = None
|
||||
|
||||
def __init__(self, raw_track):
|
||||
self.__raw = raw_track
|
||||
for segment in self.__raw.segments:
|
||||
for segment in raw_track.segments:
|
||||
seg = Segment()
|
||||
for i in range(1, len(segment.points)):
|
||||
if self.start_time is None:
|
||||
@@ -48,39 +48,68 @@ class Track(object):
|
||||
|
||||
|
||||
class Tracks(object):
|
||||
track_list = None
|
||||
__distance = dict()
|
||||
__duration = dict()
|
||||
__avg_speed = dict()
|
||||
__tracks = list()
|
||||
__files = list()
|
||||
|
||||
def __init__(self, folder):
|
||||
self.track_list = list()
|
||||
gpx_list = glob.glob(os.path.join(folder, '*.gpx'))
|
||||
for entry in gpx_list:
|
||||
with open(entry, 'r') as gpx_handle:
|
||||
gpx = gpxpy.parse(gpx_handle)
|
||||
for raw_track in gpx.tracks:
|
||||
self.track_list.append(Track(raw_track))
|
||||
def __init__(self, logger):
|
||||
self.logger = logger
|
||||
|
||||
def get(self, year='all', month='all', day='all'):
|
||||
ret = list()
|
||||
if year == 'all':
|
||||
ret = self.track_list
|
||||
elif month == 'all':
|
||||
pick_date = datetime.datetime(year=year, month=1, day=1)
|
||||
for entry in self.track_list:
|
||||
if pick_date.year == entry.start_time.year:
|
||||
ret.append(entry)
|
||||
elif day == 'all':
|
||||
pick_date = datetime.datetime(year=year, month=month, day=1)
|
||||
ret = list()
|
||||
for entry in self.track_list:
|
||||
if pick_date.year == entry.start_time.year and \
|
||||
pick_date.month == entry.start_time.month:
|
||||
ret.append(entry)
|
||||
else:
|
||||
pick_date = datetime.datetime(year=year, month=month, day=day)
|
||||
ret = list()
|
||||
for entry in self.track_list:
|
||||
if pick_date.year == entry.start_time.year and \
|
||||
pick_date.month == entry.start_time.month and \
|
||||
pick_date.day == entry.start_time.day:
|
||||
ret.append(entry)
|
||||
def add(self, filename):
|
||||
if filename not in self.__files:
|
||||
self.logger.info("Adding file %s.", filename)
|
||||
with open(filename, 'r') as f:
|
||||
self.__files.append(filename)
|
||||
gpx = gpxpy.parse(f)
|
||||
for raw in gpx.tracks:
|
||||
track = Track(raw)
|
||||
self.__tracks.append(track)
|
||||
trk_month = track.start_time.month
|
||||
trk_year = track.start_time.year
|
||||
|
||||
if trk_year not in self.__distance:
|
||||
self.__distance[trk_year] = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0}
|
||||
self.__distance[trk_year][trk_month] += track.distance / 1000
|
||||
|
||||
if trk_year not in self.__duration:
|
||||
self.__duration[trk_year] = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0}
|
||||
self.__duration[trk_year][trk_month] += track.duration.total_seconds()
|
||||
|
||||
if trk_year not in self.__avg_speed:
|
||||
self.__avg_speed[trk_year] = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0}
|
||||
self.__avg_speed[trk_year][trk_month] = self.__distance[trk_year][trk_month] / (self.__duration[trk_year][trk_month] / 3600)
|
||||
self.logger.info("Adding done.")
|
||||
|
||||
def years(self):
|
||||
ret = None
|
||||
try:
|
||||
ret = sorted(self.__distance.keys())
|
||||
except Exception:
|
||||
pass
|
||||
return ret
|
||||
|
||||
def distances(self, year):
|
||||
ret = 0
|
||||
try:
|
||||
ret = self.__distance[year].values()
|
||||
except Exception:
|
||||
pass
|
||||
return ret
|
||||
|
||||
def avg_speeds(self, year):
|
||||
ret = None
|
||||
try:
|
||||
ret = self.__avg_speed[year].values()
|
||||
except Exception:
|
||||
pass
|
||||
return ret
|
||||
|
||||
def tracks(self, start_date, end_date):
|
||||
tracks = list()
|
||||
dates = pd.date_range(start_date.date(), end_date.date())
|
||||
for track in self.__tracks:
|
||||
if track.start_time.date() in dates:
|
||||
tracks.append(track)
|
||||
return tracks
|
||||
|
Reference in New Issue
Block a user