Private
Public Access
1
0

better kml export

This commit is contained in:
2024-02-28 14:05:10 +01:00
parent eb126856a7
commit af1adf132e
7 changed files with 211 additions and 14 deletions

View File

@@ -1,6 +1,7 @@
from rowers.views.statements import *
from rowers.tasks import handle_calctrimp
from rowers.opaque import encoder
from rowers.courses import coursetokml
from xml.etree import ElementTree as ET
import arrow
@@ -11,6 +12,8 @@ from rowers.dataroutines import get_workouttype_from_tcx, get_startdate_time_zon
from rest_framework.decorators import parser_classes
from rest_framework.parsers import BaseParser
from rowers.utils import geo_distance
from datetime import datetime as dt
import rowingdata.tcxtools as tcxtools
@@ -252,9 +255,38 @@ Optional, not for CN
def course_list(request):
if request.method != 'GET':
dologging('apilog.log','{m} request to KML endpoint'.format(m=request.method))
return HttpResponseNotAllower("Method not supported")
return HttpResponseNotAllowed("Method not supported")
query_data = {}
name = request.GET.get('name')
distance = request.GET.get('course_distance')
latitude = request.GET.get('latitude')
longitude = request.GET.get('longitude')
distance_from = request.GET.get('distance_from')
if name is not None:
query_data['name__contains'] = name
if distance is not None:
try:
query_data['distance__lte'] = int(distance)+50
query_data['distance__gte'] = int(distance)-50
except:
pass
courses = GeoCourse.objects.filter(**query_data)
if latitude is not None and longitude is not None and distance_from is not None:
try:
newlist = []
for c in courses:
distance = geo_distance(float(latitude), float(longitude), c.coord[0], c.coord[1])[0]
if distance < float(distance_from):
newlist.append(c)
courses = newlist
except ValueError:
pass
courses = GeoCourse.objects.all()
courselist = []
for c in courses:
d = {
@@ -269,10 +301,23 @@ def course_list(request):
response_dict = {'courses': courselist}
print(response_dict)
return JsonResponse(response_dict, content_type='application/json; charset=utf8')
@api_view(["GET"])
def get_crewnerd_kml(request,id=0):
if request.method != 'GET':
dologging('apilog.log','{m} request to CrewNerd KML endpoint'.format(m=request.method))
return HttpResponseNotAllowed("Method not supported")
try:
c = GeoCourse.objects.get(id=id)
except GeoCourse.DoesNotExist:
raise Http404("This course does not exist")
kml = coursetokml(c, cn=True)
return HttpResponse(kml)
# Stroke data views
@csrf_exempt