diff --git a/rowers/admin.py b/rowers/admin.py index e1094553..14599dc5 100644 --- a/rowers/admin.py +++ b/rowers/admin.py @@ -6,6 +6,7 @@ from .models import ( Rower, Workout,GraphImage,FavoriteChart,SiteAnnouncement, Team,TeamInvite,TeamRequest, WorkoutComment,C2WorldClassAgePerformance,PlannedSession, + GeoCourse,GeoPolygon,GeoPoint, ) # Register your models here so you can use them in the Admin module @@ -50,6 +51,16 @@ class PlannedSessionAdmin(admin.ModelAdmin): class GraphImageAdmin(admin.ModelAdmin): list_display = ('creationdatetime','workout','filename') +class GeoPolygonInline(admin.StackedInline): + model = GeoPolygon + + +class GeoCourseAdmin(admin.ModelAdmin): + list_display = ('manager','name') + inlines = (GeoPolygonInline,) + + + admin.site.unregister(User) admin.site.register(User,UserAdmin) admin.site.register(Workout,WorkoutAdmin) @@ -63,4 +74,4 @@ admin.site.register(WorkoutComment,WorkoutCommentAdmin) admin.site.register(C2WorldClassAgePerformance, C2WorldClassAgePerformanceAdmin) admin.site.register(PlannedSession,PlannedSessionAdmin) - +admin.site.register(GeoCourse, GeoCourseAdmin) diff --git a/rowers/courses.py b/rowers/courses.py index 2d35363c..71ccaec1 100644 --- a/rowers/courses.py +++ b/rowers/courses.py @@ -12,6 +12,9 @@ from django.conf import settings from utils import myqueue from matplotlib import path +import xml.etree.ElementTree as et + +ns = {'opengis': 'http://www.opengis.net/kml/2.2'} import django_rq queue = django_rq.get_queue('default') @@ -44,7 +47,7 @@ def polygon_to_path(polygon): def coordinate_in_polygon(latitude,longitude, polygon): p = polygon_to_path(polygon) - retun p.contains_points([(latitude,longitude)])[0] + return p.contains_points([(latitude,longitude)])[0] @@ -71,3 +74,54 @@ def time_in_polygon(df,polygon,maxmin='max'): return time + + +def kmltocourse(f): + doc = et.parse(f) + polygonpms = doc.findall('.//opengis:Placemark[opengis:Polygon]',ns) + polygons = [] + for pm in polygonpms: + name = pm.findall('.//opengis:name',ns)[0].text + coordinates = pm.findall('.//opengis:coordinates',ns) + if coordinates: + cc = coordinates[0].text + else: + cc = '' + + pointstring = cc.split() + + points = [] + for s in pointstring: + coordinates = s.split(',') + points.append({ + 'longitude':float(coordinates[0]), + 'latitude':float(coordinates[1]), + }) + + polygons.append({ + 'name':name, + 'points':points + }) + + return polygons + +def createcourse(manager,name,polygons): + c = GeoCourse(manager=manager,name=name) + c.save() + + i = 0 + for p in polygons: + pp = GeoPolygon(course=c,order_in_course=i,name=p['name']) + pp.save() + j = 0 + for point in p['points']: + obj = GeoPoint( + latitude = point['latitude'], + longitude = point['longitude'], + polygon = pp, + order_in_poly = j + ) + obj.save() + j += 1 + i += 1 + diff --git a/rowers/models.py b/rowers/models.py index 6d380cc2..f90131f2 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -664,6 +664,7 @@ class GeoCourse(models.Model): class GeoPolygon(models.Model): + name = models.CharField(max_length=150,blank=True) course = models.ForeignKey(GeoCourse, blank=True) order_in_course = models.IntegerField(default=0)