Private
Public Access
1
0

courses defined by spline and other improvements

This commit is contained in:
Sander Roosendaal
2018-05-15 10:17:55 +02:00
parent 9f6d0dc66d
commit 26b6a6e29c
3 changed files with 52 additions and 7 deletions

View File

@@ -18,6 +18,9 @@ import twitter
import re
import pytz
from scipy.interpolate import splprep, splev, CubicSpline
import numpy as np
from django.conf import settings
from sqlalchemy import create_engine
import sqlalchemy as sa
@@ -376,7 +379,33 @@ def polygon_to_path(polygon):
def coordinate_in_path(latitude,longitude, p):
return p.contains_points([(latitude,longitude)])[0]
def course_spline(coordinates):
latitudes = coordinates['latitude'].values
longitudes = coordinates['longitude'].values
# spline parameters
s = 1.0
k = min([5,len(latitudes)-1])
nest = -1
t = np.linspace(0,1,len(latitudes))
tnew = np.linspace(0,1,100)
latnew = CubicSpline(t,latitudes,bc_type='clamped')(tnew)
lonnew = CubicSpline(t,longitudes,bc_type='clamped')(tnew)
# latnew = CubicSpline(t,latitudes,bc_type='natural')(tnew)
# lonnew = CubicSpline(t,longitudes,bc_type='natural')(tnew)
# tckp,u = splprep([t,latitudes,longitudes],s=s,k=k,nest=nest)
# tnew,latnew,lonnew = splev(np.linspace(0,1,100),tckp)
newcoordinates = pd.DataFrame({
'latitude':latnew,
'longitude':lonnew,
})
return newcoordinates
def course_coord_center(course):
@@ -393,10 +422,12 @@ def course_coord_center(course):
latitude = pd.Series(latitudes).median()
longitude = pd.Series(longitudes).median()
coordinates = pd.DataFrame({
'latitude':latitudes,
'longitude':longitudes,
})
return latitude,longitude,coordinates
@@ -868,7 +899,7 @@ class GeoPolygon(models.Model):
return u'{coursename} - {name}'.format(
name=name,
course=coursename
coursename=coursename
)
@@ -1157,9 +1188,12 @@ registerchoices = (
class VirtualRace(PlannedSession):
# has_registration = models.BooleanField(default=False)
registration_form = models.CharField(max_length=100,
default='windowstart',
choices=registerchoices)
registration_form = models.CharField(
max_length=100,
default='windowstart',
choices=registerchoices,
verbose_name='Registration Closure Quick Selector'
)
registration_closure = models.DateTimeField(blank=True,null=True)
evaluation_closure = models.DateTimeField(blank=True,null=True)
start_time = models.TimeField(blank=True,null=True)
@@ -1348,6 +1382,12 @@ class VirtualRaceForm(ModelForm):
if startdatetime > enddatetime:
raise forms.ValidationError("The Start of the Race Window should be before the End of the Race Window")
try:
evaluation_closure = cd['evaluation_closure']
except KeyError:
evaluation_closure = enddatetime+datetime.timedelta(days=1)
cd['evaluation_closure'] = evaluation_closure
if cd['evaluation_closure'] <= enddatetime:
raise forms.ValidationError("Evaluation closure deadline should be after the Race Window closes")
@@ -1355,7 +1395,7 @@ class VirtualRaceForm(ModelForm):
raise forms.ValidationError("Evaluation closure cannot be in the past")
return cleaned_data
return cd
class PlannedSessionFormSmall(ModelForm):