diff --git a/rowers/templates/list_courses.html b/rowers/templates/list_courses.html index d247a90a..bd99a4f7 100644 --- a/rowers/templates/list_courses.html +++ b/rowers/templates/list_courses.html @@ -66,7 +66,7 @@
{% if location %}- Filter nearby courses + Filter courses closest to you {{ city }} {{ country_name }} {{ time_zone }}
diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index 04642d57..e4826a76 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -9,6 +9,71 @@ from rowers.scoring import * from django.contrib.gis.geoip2 import GeoIP2 +# distance of course from lat_lon in km +def howfaris(lat_lon,course): + coords = course.coord + distance = geo_distance(lat_lon[0],lat_lon[1],coords[0],coords[1])[0] + + return distance + +# get nearest races +def getnearestraces(lat_lon,races): + newlist = [] + counter = 0 + for race in races: + if race.course is None: + newlist.append(race) + else: + c = race.course + coords = c.coord + distance = howfaris(lat_lon,c) + if distance < 100: + newlist.append(race) + counter += 1 + + if counter>0: + races = newlist + else: + courseraces = races.exclude(course__isnull=True) + orders = [(c.id,howfaris(lat_lon,c.course)) for c in courseraces] + orders = sorted(orders,key = lambda tup:tup[1]) + ids = [id for id,distance in orders[0:4]] + for id, distance in orders[5:]: + if distance<100: + ids.append(id) + + for id in ids: + newlist.append(VirtualRace.objects.get(id=id)) + races = newlist + + return races + +def getnearestcourses(lat_lon,courses): + newlist = [] + counter = 0 + for c in courses: + coords = c.coord + distance = howfaris(lat_lon,c) + if distance < 100: + newlist.append(race) + counter += 1 + + if counter>0: + courses = newlist + else: + orders = [(c.id,howfaris(lat_lon,c)) for c in courses] + orders = sorted(orders,key = lambda tup:tup[1]) + ids = [id for id,distance in orders[0:4]] + for id, distance in orders[5:]: + if distance<100: + ids.append(id) + + for id in ids: + newlist.append(GeoCourse.objects.get(id=id)) + courses = newlist + + return courses + # List Courses def courses_view(request): r = getrower(request.user) @@ -21,9 +86,9 @@ def courses_view(request): except: lat_lon = None city = { - 'city': None, - 'country_name': None, - 'time_zone': None, + 'city': '', + 'country_name': '', + 'time_zone': '', } @@ -31,13 +96,7 @@ def courses_view(request): nearby = request.GET.get('nearby') if nearby and lat_lon is not None: - newlist = [] - for c in courses: - coords = c.coord - distance = geo_distance(lat_lon[0],lat_lon[1],coords[0],coords[1])[0] - if distance < 100: - newlist.append(c) - courses = newlist + courses = getnearestcourses(lat_lon,courses) @@ -686,9 +745,9 @@ def virtualevents_view(request): except: lat_lon = None city = { - 'city': None, - 'country_name': None, - 'time_zone': None, + 'city': '', + 'country_name': '', + 'time_zone': '', } # default races @@ -766,19 +825,10 @@ def virtualevents_view(request): form = VirtualRaceSelectForm() nearby = request.GET.get('nearby') - if nearby and lat_lon is not None: - newlist = [] - for race in races: - if race.course is None: - newlist.append(race) - else: - c = race.course - coords = c.coord - distance = geo_distance(lat_lon[0],lat_lon[1],coords[0],coords[1])[0] - if distance < 100: - newlist.append(race) - races = newlist + if nearby and lat_lon is not None: + races = getnearestraces(lat_lon,races) + if is_ajax: return render(request,'racelist.html',