From 3fd121d3209d54e784ab5f81c5adc6734b1465c6 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 1 Jul 2020 14:54:05 +0200 Subject: [PATCH 1/2] better sorting --- rowers/views/racesviews.py | 88 ++++++++++++++++++++++++++++++-------- 1 file changed, 69 insertions(+), 19 deletions(-) diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index 04642d57..bd9c1964 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) @@ -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) @@ -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', From ebd38b1dd272e7653cfef9743ba78cdccbce5648 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 1 Jul 2020 14:55:47 +0200 Subject: [PATCH 2/2] none to nothing --- rowers/templates/list_courses.html | 2 +- rowers/views/racesviews.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) 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 bd9c1964..e4826a76 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -86,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': '', } @@ -745,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