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',