diff --git a/rowers/courses.py b/rowers/courses.py index ab8bc77b..397cc23a 100644 --- a/rowers/courses.py +++ b/rowers/courses.py @@ -9,6 +9,7 @@ from django.db import IntegrityError import uuid from django.conf import settings +import geocoder from matplotlib import path import xml.etree.ElementTree as et @@ -119,7 +120,7 @@ def time_in_path(df,p,maxmin='max'): b = (~df['inpolygon']).shift(1)+df['inpolygon'] if len(df[b==2]): - return df[b==2]['time'].min() + return df[b==2]['time'].min(),df[b==2]['cum_dist'].min() raise InvalidTrajectoryError("Trajectory doesn't go through path") @@ -186,8 +187,6 @@ def kmltocourse(f): return get_polygons(polygonpms) -from geopy.geocoders import Nominatim -geolocator = Nominatim() def createcourse( @@ -203,16 +202,17 @@ def createcourse( j = 0 for point in p['points']: if i==0 and j==0: - try: - loc = geolocator.reverse((point['latitude'],point['longitude'])) - country = loc.raw['address']['country'] - if isinstance(country,unicode): - country = country.encode('utf8') - elif isinstance(country, str): - country = country.decode('utf8') - except GeocoderInsufficientPrivileges: - country = "Unknown Country" - + latitude = point['latitude'] + longitude = point['longitude'] + g = geocoder.google([latitude,longitude],method='reverse') + if g.ok: + address = g.raw['address_components'] + country = 'unknown' + for a in address: + if 'country' in a['types']: + country = a['long_name'] + else: + country = 'unknown' c.country = country c.save() obj = GeoPoint( @@ -227,9 +227,25 @@ def createcourse( return c -def coursetime_paths(data,paths): +def coursetime_first(data,paths): entrytime = data['time'].max() + entrydistance = data['cum_dist'].max() + coursecompleted = False + + try: + entrytime,entrydistance = time_in_path(data,paths[0],maxmin='max') + coursecompleted = True + except InvalidTrajectoryError: + entrytime = data['time'].max() + entrydistance = data['cum_dist'].max() + coursecompleted = False + return entrytime, entrydistance, coursecompleted + +def coursetime_paths(data,paths,finalmaxmin='min'): + + entrytime = data['time'].max() + entrydistance = data['cum_dist'].max() coursecompleted = False # corner case - empty list of paths @@ -239,34 +255,42 @@ def coursetime_paths(data,paths): # end - just the Finish polygon if len(paths) == 1: try: - entrytime = time_in_path(data,paths[0],maxmin='min') + ( + entrytime, + entrydistance + ) = time_in_path(data,paths[0],maxmin=finalmaxmin) coursecompleted = True - print entrytime except InvalidTrajectoryError: entrytime = data['time'].max() + entrydistance = data['cum_dist'].max() coursecompleted = False - return entrytime,coursecompleted + return entrytime,entrydistance,coursecompleted if len(paths) > 1: try: - time = time_in_path(data, paths[0]) + time,dist = time_in_path(data, paths[0]) data = data[data['time']>time] data['time'] = data['time']-time - print time - timenext, coursecompleted = coursetime_paths(data,paths[1:]) - return time+timenext, coursecompleted + data['cum_dist'] = data['cum_dist']-dist + ( + timenext, + distnext, + coursecompleted + ) = coursetime_paths(data,paths[1:]) + return time+timenext, dist+distnext,coursecompleted except InvalidTrajectoryError: entrytime = data['time'].max() + entrydistance = data['cum_dist'].max() coursecompleted = False - return entrytime, coursecompleted + return entrytime, entrydistance, coursecompleted def get_time_course(ws,course): coursetimeseconds = 0.0 coursecompleted = 0 w = ws[0] - columns = ['time',' latitude',' longitude'] + columns = ['time',' latitude',' longitude','cum_dist'] rowdata = dataprep.getsmallrowdata_db( columns, ids = [w.id], @@ -292,8 +316,20 @@ def get_time_course(ws,course): path = polygon_to_path(polygon) paths.append(path) - coursetimeseconds,coursecompleted = coursetime_paths(rowdata,paths) + ( + coursetimeseconds, + coursemeters, + coursecompleted, + + ) = coursetime_paths(rowdata,paths) + ( + coursetimefirst, + coursemetersfirst, + firstcompleted + ) = coursetime_first( + rowdata,paths) - print 'course time?',coursetimeseconds + coursetimeseconds = coursetimeseconds-coursetimefirst + coursemeters = coursemeters-coursemetersfirst - return coursetimeseconds,coursecompleted + return coursetimeseconds,coursemeters,coursecompleted diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index a25ce578..02dc773b 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -121,6 +121,7 @@ def get_session_metrics(ps): completedatev = '' durationv /= 60. + trimp.append(int(trimpv)) duration.append(int(durationv)) distance.append(int(distancev)) @@ -237,7 +238,11 @@ def is_session_complete_ws(ws,ps): return ratio,'partial',completiondate elif ps.sessiontype == 'coursetest': if ps.course: - coursetime,coursecompleted = courses.get_time_course(ws,ps.course) + ( + coursetime, + coursemeters, + coursecompleted + ) = courses.get_time_course(ws,ps.course) if coursecompleted: return 1.0,'completed',completiondate else: diff --git a/rowers/templates/plannedsessionview.html b/rowers/templates/plannedsessionview.html index 9c4b62e3..5a77ad03 100644 --- a/rowers/templates/plannedsessionview.html +++ b/rowers/templates/plannedsessionview.html @@ -65,7 +65,7 @@