diff --git a/rowers/courses.py b/rowers/courses.py
index 59048cd1..abc44597 100644
--- a/rowers/courses.py
+++ b/rowers/courses.py
@@ -63,18 +63,22 @@ def getnearestraces(lat_lon,races,whatisnear=150):
return races
-def getnearestcourses(lat_lon,courses,whatisnear=150):
+def getnearestcourses(lat_lon,courses,whatisnear=150,strict=False):
+ print(lat_lon,whatisnear)
newlist = []
counter = 0
for c in courses:
coords = c.coord
distance = howfaris(lat_lon,c)
+
if distance < whatisnear:
newlist.append(c)
counter += 1
if counter>0:
courses = newlist
+ elif strict:
+ courses = newlist
else:
orders = [(c.id,howfaris(lat_lon,c)) for c in courses]
orders = sorted(orders,key = lambda tup:tup[1])
diff --git a/rowers/forms.py b/rowers/forms.py
index 6f27093e..db7daea4 100644
--- a/rowers/forms.py
+++ b/rowers/forms.py
@@ -1472,30 +1472,36 @@ class RaceResultFilterForm(forms.Form):
entrycategory = forms.MultipleChoiceField(
choices = [],
label = 'Groups',
- widget=forms.CheckboxSelectMultiple()
+ widget=forms.CheckboxSelectMultiple(),
+ required=False,
)
def __init__(self, *args, **kwargs):
- if 'records' in kwargs:
- records = kwargs.pop('records',None)
+ records = kwargs.pop('records',None)
+ groups = kwargs.pop('groups',None)
+
+
super(RaceResultFilterForm,self).__init__(*args,**kwargs)
if records:
# group
- thecategories = [record.entrycategory for record in records]
- thecategories = list(set(thecategories))
- if len(thecategories) <= 1:
- del self.fields['entrycategory']
+ if groups:
+ thecategories = [record.entrycategory for record in records]
+ thecategories = list(set(thecategories))
+ if len(thecategories) <= 1:
+ del self.fields['entrycategory']
+ else:
+ categorychoices = []
+ for category in thecategories:
+ if category is not None:
+ categorychoices.append(
+ (category.id,category)
+ )
+ self.fields['entrycategory'].choices = categorychoices
+ self.fields['entrycategory'].initial = [cat[0] for cat in categorychoices]
else:
- categorychoices = []
- for category in thecategories:
- if category is not None:
- categorychoices.append(
- (category.id,category)
- )
- self.fields['entrycategory'].choices = categorychoices
- self.fields['entrycategory'].initial = [cat[0] for cat in categorychoices]
+ del self.fields['entrycategory']
# sex
thesexes = [record.sex for record in records]
diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py
index 09bac286..f811b63d 100644
--- a/rowers/interactiveplots.py
+++ b/rowers/interactiveplots.py
@@ -66,7 +66,7 @@ from rowers.courses import (
)
from rowers import mytypes
-from rowers.models import course_spline
+from rowers.models import course_spline,VirtualRaceResult
import datetime
import math
@@ -2419,47 +2419,185 @@ def course_map(course):
return script,div
-def leaflet_chart(lat,lon,name=""):
- if lat.empty or lon.empty: # pragma: no cover
- return [0,"invalid coordinate data"]
+def get_map_script_course(
+ latmean,
+ lonmean,
+ latbegin,
+ latend,
+ longbegin,
+ longend,
+ scoordinates,
+ course,
+ ):
+ latmean,lonmean,coordinates = course_coord_center(course)
+ lat_min, lat_max, long_min, long_max = course_coord_maxmin(course)
- # Throw out 0,0
- df = pd.DataFrame({
- 'lat':lat,
- 'lon':lon
- })
-
- df = df.replace(0,np.nan)
- 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: # pragma: no cover
- return [0,"invalid coordinate data"]
-
- latmean = lat.mean()
- lonmean = lon.mean()
-
- latbegin = lat[lat.index[0]]
- longbegin = lon[lon.index[0]]
- latend = lat[lat.index[-1]]
- longend = lon[lon.index[-1]]
-
- coordinates = zip(lat,lon)
+ coordinates = course_spline(coordinates)
scoordinates = "["
- for x,y in coordinates:
+ for index,row in coordinates.iterrows():
scoordinates += """[{x},{y}],
""".format(
- x=x,
- y=y
+ x=row['latitude'],
+ y=row['longitude']
+ )
+
+ scoordinates +="]"
+
+ polygons = GeoPolygon.objects.filter(course=course).order_by("order_in_course")
+
+ plabels = ''
+
+ for p in polygons:
+ coords = polygon_coord_center(p)
+
+ plabels += """
+ var marker = L.marker([{latbegin}, {longbegin}]).addTo(mymap);
+ marker.bindPopup("{name}");
+
+ """.format(
+ latbegin = coords[0],
+ longbegin = coords[1],
+ name = p.name
)
- scoordinates += "]"
+ pcoordinates = """[
+ """
+ for p in polygons:
+ pcoordinates += """[
+ ["""
+
+ points = GeoPoint.objects.filter(polygon=p).order_by("order_in_poly")
+
+ for pt in points:
+ pcoordinates += "[{x},{y}],".format(
+ x = pt.latitude,
+ y = pt.longitude
+ )
+
+ # remove last comma
+ pcoordinates = pcoordinates[:-1]
+ pcoordinates += """]
+ ],
+ """
+
+ pcoordinates += """
+ ]"""
+
+ script = """
+
+ """.format(
+ latmean=latmean,
+ lonmean=lonmean,
+ latbegin = latbegin,
+ latend=latend,
+ longbegin=longbegin,
+ longend=longend,
+ scoordinates=scoordinates,
+ pcoordinates=pcoordinates,
+ plabels=plabels
+ )
+
+ return script
+
+
+def get_map_script(
+ latmean,
+ lonmean,
+ latbegin,
+ latend,
+ longbegin,
+ longend,
+ scoordinates,
+ ):
script = """