diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 76aa0a2d..3833dda9 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -2054,10 +2054,12 @@ def leaflet_chart_compare(course,workoutids,labeldict={},startenddict={}): for id in workoutids: w = Workout.objects.get(id=id) rowdata = rdata(w.csvfilename) + time = rowdata.df['TimeStamp (sec)'] df = pd.DataFrame({ - 'id':id, + 'workoutid':id, 'lat':rowdata.df[' latitude'], - 'lon':rowdata.df[' longitude'] + 'lon':rowdata.df[' longitude'], + 'time':time-time[0], }) data.append(df) @@ -2072,15 +2074,24 @@ def leaflet_chart_compare(course,workoutids,labeldict={},startenddict={}): df = df.loc[(df!=0).any(axis=1)] df.fillna(method='bfill',axis=0,inplace=True) df.fillna(method='ffill',axis=0,inplace=True) + + + lat = df['lat'] lon = df['lon'] if lat.empty or lon.empty: return [0,"invalid coordinate data"] - latbegin = lat[lat.index[0]] - longbegin = lon[lon.index[0]] - latend = lat[lat.index[-1]] - longend = lon[lon.index[-1]] + latbegin = lat.values[0] + longbegin = lon.values[0] + latend = lat.values[-1] + longend = lon.values[-1] + + colors = itertools.cycle(palette) + try: + items = itertools.izip(workoutids,colors) + except AttributeError: + items = zip(workoutids,colors) coordinates = zip(lat,lon) @@ -2166,16 +2177,8 @@ def leaflet_chart_compare(course,workoutids,labeldict={},startenddict={}): "Navionics":navionics, }}).addTo(mymap); - var marker = L.marker([{latbegin}, {longbegin}]).addTo(mymap); - marker.bindPopup("Start"); - var emarker = new L.marker([{latend}, {longend}]).addTo(mymap); - emarker.bindPopup("End"); - var latlongs = {scoordinates} - var polyline = L.polyline(latlongs, {{color:'red'}}).addTo(mymap) - mymap.fitBounds(polyline.getBounds()) - """.format( latmean=latmean, lonmean=lonmean, @@ -2186,6 +2189,51 @@ def leaflet_chart_compare(course,workoutids,labeldict={},startenddict={}): scoordinates=scoordinates, ) + for id,color in items: + group = df[df['workoutid']==int(id)].copy() + try: + startsecond,endsecond = startenddict[id] + except KeyError: + startsecond = 0 + endsecond = 0 + + group.sort_values(by='time',ascending=True,inplace=True) + group.dropna(axis=0,how='any',inplace=True) + if endsecond > 0: + group['time'] = group['time'] - startsecond + mask = group['time'] < 0 + group.mask(mask,inplace=True) + mask = group['time'] > (endsecond-startsecond) + group.mask(mask,inplace=True) + + lat = group['lat'].dropna() + lon = group['lon'].dropna() + + coordinates = zip(lat,lon) + + scoordinates = "[" + for x,y in coordinates: + scoordinates += """[{x},{y}], + """.format(x=x,y=y) + scoordinates += "]" + + script += """ + var latlongs = {scoordinates} + var polyline = L.polyline(latlongs, {{color:'{color}'}}).addTo(mymap) + mymap.fitBounds(polyline.getBounds()) + """.format( + scoordinates=scoordinates, + color=color, + ) + + script += """ + + + """ + + + + div = """

 

""" diff --git a/rowers/templates/mapcompare.html b/rowers/templates/mapcompare.html index e9ca1e92..9791b74b 100644 --- a/rowers/templates/mapcompare.html +++ b/rowers/templates/mapcompare.html @@ -1,6 +1,12 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} + +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} {% block title %}View Comparison {% endblock %} @@ -11,32 +17,15 @@ Bokeh.set_log_level("info"); -{{ interactiveplot |safe }} -

Interactive Comparison

-
    -
  • -
    - {{ the_div|safe }} + +
    + {{ mapdiv|safe }} + {{ mapscript|safe }}
    -
  • -
  • -
    - {% csrf_token %} - - {{ chartform.as_table }} -
    - -

    - -

    -
    -
  • -
- {% endblock %} diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index c672d11d..f5c06fd5 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -1571,8 +1571,8 @@ def virtualevent_mapcompare_view(request,id=0): return render(request,'mapcompare.html', - {'interactiveplot':script, - 'the_div':div, + {'mapscript':script, + 'mapdiv':div, 'breadcrumbs':breadcrumbs, 'rower':r, 'race':race,